ジンのフレームを使用するプロセスでは、検証リターンを要求するエラーメッセージが私を悩ませてきた、ジンの文書はエラーメッセージを返すことです
router.POST("/loginJSON", func(c *gin.Context) {
var json Login
if err := c.ShouldBindJSON(&json); err == nil {
if json.User == "manu" && json.Password == "123" {
c.JSON(http.StatusOK, gin.H{"status": "you are logged in"})
} else {
c.JSON(http.StatusUnauthorized, gin.H{"status": "unauthorized"})
}
} else {
c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()})
}
})
エラーは、我々は、おそらくケースを得ました
{
"message": "Key: 'LoginRequest.Mobile' Error:Field validation for 'Mobile' failed on the 'required' tag\nKey: 'LoginRequest.Code' Error:Field validation for 'Code' failed on the 'required' tag"
}
このメッセージは、バリの文書はまた、唯一の開発時にデバッグに使用され、この情報を使用することを記載し、非常に友好的ではありません。だから私たちが戻るんどのように認証プロンプトがそれをカスタマイズします。参考文書のバリデータは、私は達成されました。
第一の結合モデルを定義
import (
"gopkg.in/go-playground/validator.v8"
)
// 绑定模型
type LoginRequest struct {
Mobile string `form:"mobile" json:"mobile" binding:"required"`
Code string `form:"code" json:"code" binding:"required"`
}
// 绑定模型获取验证错误的方法
func (r *LoginRequest) GetError (err validator.ValidationErrors) string {
// 这里的 "LoginRequest.Mobile" 索引对应的是模型的名称和字段
if val, exist := err["LoginRequest.Mobile"]; exist {
if val.Field == "Mobile" {
switch val.Tag{
case "required":
return "请输入手机号码"
}
}
}
if val, exist := err["LoginRequest.Code"]; exist {
if val.Field == "Code" {
switch val.Tag{
case "required":
return "请输入验证码"
}
}
}
return "参数错误"
}
この方法をログに記録する、例をモデルを使用する方法
import (
"github.com/gin-gonic/gin"
"net/http"
"gopkg.in/go-playground/validator.v8"
)
func Login(c *gin.Context) {
var loginRequest LoginRequest
if err := c.ShouldBind(&loginRequest); err == nil {
// 参数接收正确, 进行登录操作
c.JSON(http.StatusOK, loginRequest)
}else{
// 验证错误
c.JSON(http.StatusUnprocessableEntity, gin.H{
"message": loginRequest.GetError(err.(validator.ValidationErrors)), // 注意这里要将 err 进行转换
})
}
}
このように、検証エラー、我々は、エラー・メッセージ、独自の定義を返すことができます。
あなたが助けを持っている場合は、賞賛にそれをポイントしてください。