第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

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

Gin Gonic 自定義錯誤消息在發(fā)送無效數(shù)據(jù)時失敗

Gin Gonic 自定義錯誤消息在發(fā)送無效數(shù)據(jù)時失敗

Go
慕少森 2022-10-04 16:52:11
驗證器結(jié)構(gòu)type RegisterValidator struct {    Name              string     `form:"name" json:"name" binding:"required,min=4,max=50"`    Email             string     `form:"email" json:"email" binding:"required,email,min=4,max=50"`    Password          string     `form:"password" json:"password" binding:"required,min=8,max=50"`    MobileCountryCode int        `form:"mobile_country_code" json:"mobile_country_code" binding:"required,gte=2,lt=5"`    Mobile            int        `form:"mobile" json:"mobile" binding:"required,gte=5,lt=15"`    UserModel         users.User `json:"-"`}設(shè)置自定義錯誤的格式,如下所示:type CustomError struct {    Errors map[string]interface{} `json:"errors"`}func NewValidatorError(err error) CustomError {    res := CustomError{}    res.Errors = make(map[string]interface{})    errs := err.(validator.ValidationErrors)    for _, v := range errs {        param := v.Param()        field := v.Field()        tag := v.Tag()        if param != "" {            res.Errors[field] = fmt.Sprintf("{%v: %v}", tag, param)        } else {            res.Errors[field] = fmt.Sprintf("{key: %v}", tag)        }    }    return res}當(dāng)發(fā)送的數(shù)據(jù)是{    "email": "me@example.com",    "name": "John Doe",    "mobile_country_code": 1,    "mobile": 1234567}但發(fā)送無效類型{    "email": "me@example.com",    "name": "John Doe",    "mobile_country_code": "1",    "mobile": 1234567}拋出錯誤interface conversion: error is *json.UnmarshalTypeError, not validator.ValidationErrors這個問題與此問題有關(guān):如何斷言錯誤類型 json。當(dāng)被杜松子酒c.BindJSON捕獲時,取消消息打印錯誤,但是答案沒有意義。
查看完整描述

2 回答

?
慕桂英3389331

TA貢獻(xiàn)2036條經(jīng)驗 獲得超8個贊


如異常所示,以下行類型轉(zhuǎn)換失敗


    errs := err.(validator.ValidationErrors)

不同類型的錯誤必須傳遞到不是驗證器的函數(shù)中。驗證錯誤。


因此,請確保其他錯誤不會傳遞到 .或者做一個更安全的類型檢查,比如:NewValidatorError


errs, ok := err.(validator.ValidationErrors)

if !ok {

  // handles other err type

}


查看完整回答
反對 回復(fù) 2022-10-04
?
米脂

TA貢獻(xiàn)1836條經(jīng)驗 獲得超3個贊

我添加了對取消封版類型錯誤的檢查,如下所示:


    if reflect.TypeOf(err).Elem().String() == "json.UnmarshalTypeError" {

        errs := err.(*json.UnmarshalTypeError)

        res.Errors[errs.Field] = fmt.Sprintf("{key: %v}", errs.Error())


        return res

    }


    errs := err.(validator.ValidationErrors)


我猜當(dāng)json是類型提示時,戈蘭是嚴(yán)格的。它必須是確切的類型,否則它將引發(fā)錯誤。UnmarshalTypeError


查看完整回答
反對 回復(fù) 2022-10-04
  • 2 回答
  • 0 關(guān)注
  • 130 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號