亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

接口轉換:error是*errors.errorString,不是validator.

接口轉換:error是*errors.errorString,不是validator.

Go
慕雪6442864 2022-11-23 13:55:27
type BookInput struct {  Title string `json:"title" binding:"required"`  Price json.Number `json:"price" binding:"required,number"`}func PostBookHandler(ctx *gin.Context) {  var bookInput book.BookInput  err := ctx.ShouldBindJSON(&bookInput)  if err != nil {    errorMessages := []string{}    for _, e := range err.(validator.ValidationErrors) {        errorMessage := fmt.Sprintf("Error on filed %s, condition: %s", e.Field(), e.ActualTag())        errorMessages = append(errorMessages, errorMessage)    }    ctx.JSON(http.StatusBadRequest, gin.H {        "errors": errorMessages,     })    return  }  ctx.JSON(http.StatusOK, gin.H {    "title": bookInput.Title,    "price": bookInput.Price,  })} 我試圖驗證價格輸入,但得到的結果出乎意料。我寫的代碼和上面的一樣,有人可以幫我嗎?
查看完整描述

3 回答

?
慕婉清6462132

TA貢獻1804條經驗 獲得超2個贊

在這種情況下返回的錯誤可能不是,validator.ValidationErrors它可能是別的東西。例如,如果正文是無效的 JSON,則根本不會到達驗證步驟。


在您的代碼中,您正在執行一個未經檢查的斷言range err.(validator.ValidationErrors),這可能會引起恐慌。


這是您可以有條件地處理錯誤的方式:


err := ctx.ShouldBindJSON(&bookInput)

if err != nil {

    var ve validator.ValidationErrors

    if errors.As(err, &ve) {

       // handle validator error

    }

    // handle non-validator error

    return

}


查看完整回答
反對 回復 2022-11-23
?
守候你守候我

TA貢獻1802條經驗 獲得超10個贊

也許它可以幫助:


type BookInput struct {

    Title string `json:"title" binding:"required"`

    

    Price interface{} `json:"price" binding:"required,number"`

}


func postBooksHandler(c *gin.Context) {

    var bookInput BookInput


    err := c.ShouldBindJSON(&bookInput)

    if err != nil {


        errorMessages := []string{}

        for _, e := range err.(validator.ValidationErrors) {

            errorMessage := fmt.Sprintf("Error on field %s, conditon: %s", e.Field(), e.ActualTag())

            errorMessages = append(errorMessages, errorMessage)


        }

        c.JSON(http.StatusBadRequest, gin.H{

            "error": errorMessages,

        })

        return

    }

    c.JSON(http.StatusOK, gin.H{

        "title": bookInput.Title,

        "price": bookInput.Price,

    })


}


查看完整回答
反對 回復 2022-11-23
?
繁星點點滴滴

TA貢獻1803條經驗 獲得超3個贊

需要為錯誤創建兩個條件,因為validator.ValidationErrors沒有涵蓋所有內容。


這是我的代碼:


if err != nil {

    var ve validator.ValidationErrors

    if errors.As(err, &ve) {

        for _, e := range err.(validator.ValidationErrors) {

            c.JSON(http.StatusBadRequest, gin.H{

                "error":   true,

                "message": "" + e.Field() + " kosong",

            })

            return

        }

    }

    c.JSON(http.StatusBadRequest, gin.H{

        "error":   true,

        "message": err.Error(),

    })

}


查看完整回答
反對 回復 2022-11-23
  • 3 回答
  • 0 關注
  • 283 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號