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": "alu@alu.com","name": "alu"},{"email": "","name": "alu"}]}' http://localhost:8080/

结果:

{"message":"Key: 'data.User[1].Email' Error:Field validation for 'Email' failed on the 'required' tag"}

 

  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值