前提・実現したいこと
Go言語のGinフレームワークで標準のバリデーション機能を利用しています。
URIパラメーター一つに対して、故意に複数のエラーが出せるかどうかを試したのですが、
一つずつしか出力されないことが分かりましたので、複数出せる方法がないかを質問させていただきます。
ここではhttp://localhost:8080/test/:id
を対象とします。
発生している問題・エラーメッセージ
:id
には、「数字のみ、かつ最大3文字まで」というBind条件を定義しました。
Go
1type hoge struct { 2 ID string `uri:"id" binding:"numeric,max=3"` 3}
故意にエラーの発生する:id
を入力した場合のケースです。
(1) localhost:8080/test/1234a
を入れた場合のエラーレスポンス
numeric,max=3
の両方が引っかかるものと考えておりましたが、エラー一つしか返ってきませんでした。
JSON
1{"msg":"Key: 'hoge.ID' Error:Field validation for 'ID' failed on the 'numeric' tag"}
該当のソースコード
Go
1 2package main 3 4import "github.com/gin-gonic/gin" 5 6//idのパラメーターで、numericとmax=3の両方に引っかかるパラメータを入れたい 7type hoge struct { 8 ID string `uri:"id" binding:"numeric,max=3"` 9} 10 11func main() { 12 r := gin.Default() 13 r.GET("test/:id", func(c *gin.Context) { 14 var h hoge 15 if err := c.ShouldBindUri(&h); err != nil { 16 c.JSON(400, gin.H{"msg": err.Error()}) 17 return 18 } 19 id := c.Param("id") 20 c.JSON(200, gin.H{ 21 "pong": id, 22 }) 23 }) 24 r.Run(:8080) 25} 26 27 28
補足情報(FW/ツールのバージョンなど)
- Windows10
- Windows版Go 1.17.5 windows/amd64
- Gin 1.7.7
あなたの回答
tips
プレビュー