[英]Validation Number in Gin Golang
驗證 gin 中的數字時出現錯誤,對於字符串數據類型沒有錯誤並且檢測到它們,但是當我用字符串填寫 int 類型的價格字段時,它會出現 500 的錯誤,我希望錯誤為400,解決辦法是什么?
package web
type BookRequest struct{
Title string `json:"title" binding:"required"`
Description string `json:"description" binding:"required"`
Price int `json:"price" binding:"required,numeric,gte=0"`
Rating int `json:"rating" binding:"required,numeric"`
}
func (controller *BookControllerImpl) Create(ctx *gin.Context) {
var bookRequest web.BookRequest
err := ctx.ShouldBindJSON(&bookRequest)
if err != nil {
var error_request []string
for _, e := range err.(validator.ValidationErrors) {
errorMessage := fmt.Sprintf("Error field %s, Condition %s", e.Field(), e.ActualTag())
error_request = append(error_request, errorMessage)
}
ctx.JSON(http.StatusBadRequest, web.WebResponse{
Code: http.StatusBadRequest,
Status: "BAD REQUEST",
Data: error_request,
})
return
}
book, err := controller.BookService.Create(bookRequest)
if err != nil {
ctx.JSON(http.StatusBadRequest, web.WebResponse{
Code: http.StatusBadRequest,
Status: "BAD REQUEST",
Data: err,
})
}
ctx.JSON(http.StatusOK, web.WebResponse{
Code: 200,
Status: "Ok",
Data: book,
})
}
when I fill in the price field of type int with a string
如果您的請求( payload Price
)不是標准的,或者它可以是string or number
,您可以為您的結構使用json.Number
類型。
type BookRequest struct{
Title string `json:"title" binding:"required"`
Description string `json:"description" binding:"required"`
Price json.Number `json:"price" binding:"required,numeric,gte=0"`
Rating int `json:"rating" binding:"required,numeric"`
}
這是 json 的一個簡單示例。編號: https://go.dev/play/p/7fyCFAon2PC
validator.ValidationErrors
:...
err := ctx.ShouldBindJSON(&bookRequest)
if err != nil {
if vals, ok := err.(validator.ValidationErrors); ok {
// do for loop from vals
...
ctx.JSON(http.StatusBadRequest, web.WebResponse{
Code: http.StatusBadRequest,
Status: "BAD REQUEST",
Data: error_request,
})
return
}
ctx.JSON(http.StatusInternalServerError, web.WebResponse{
Code: http.StatusInternalServerError,
Status: "Internal Server Error",
Data: err,
})
return
}
...
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.