1. 程式人生 > >go gin框架 binding:"required" 註解不起作用

go gin框架 binding:"required" 註解不起作用

 

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"}