go gin框架 binding:"required" 註解不起作用
阿新 • • 發佈:2018-11-09
Gin是一個golang的微框架,封裝比較優雅,API友好,原始碼註釋比較明確,已經發布了1.0版本。具有快速靈活,容錯方便等特點。其實對於golang而言,web框架的依賴要遠比Python,Java之類的要小。
但是今天卻發現 在 struct 加上該註釋並沒有用,於是翻牆找遍文件終於找到了答案
必須使用 dive 標記,它告訴 required 校驗 深入到 slice、array 這樣的子結構體裡。
package main import ( "fmt" "net/http" "github.com/gin-gonic/gin" ) type user struct { Name string `json:"name" binding:"required"` Email string `json:"email" binding:"required,email"` } type data struct { User []user `json:"user" binding:"required,dive"` // use dive tag } //GetDataTest will get test data func GetDataTest(c *gin.Context) { var data data err := c.Bind(&data) if err == nil { fmt.Printf("%+v", data) c.JSON(http.StatusOK, gin.H{ "message": "done", }) } else { c.JSON(http.StatusBadRequest, gin.H{ "message": err.Error(), }) } } func main(){ route := gin.Default() route.POST("/", GetDataTest) route.Run(":8080") }
訪問測試:
$ curl -H "Content-Type: application/json" -X POST --data '{"user": [{"email": "[email protected]","name": "alu"},{"email": "","name": "alu"}]}' http://localhost:8080/
結果:
{"message":"Key: 'data.User[1].Email' Error:Field validation for 'Email' failed on the 'required' tag"}