
最近在研究 gin 框架 用到参数验证器 发现真的难用
我在验证传参的时候 只能验证大写的变量
请问:怎样才能验证以小写字母开头的变量
传小写变量:
2019/08/29 17:45:48 [P 为必填字段 N 为必填字段] [GIN] 2019/08/29 - 17:45:48 | 200 | 1.995798ms | 192.168.5.21 | GET /v1/api/test/test_users?p=1&n=15 获取不到传入的待验证参数:
2019/08/29 17:45:48 [P 为必填字段 N 为必填字段] 如果传:
注意是大写的 P 和 N 就正常啦 可以通过验证
[GET] /v1/api/test/test_users?P=1&N=15 附上代码:
用了中间件去加载验证器及验证翻译包
import ( "gin-test/common" "github.com/gin-gonic/gin" ut "github.com/go-playground/universal-translator" "gopkg.in/go-playground/validator.v9" "log" ) type Page struct { P uint `json:"p" validate:"required,min=1"` N uint `json:"n" validate:"required,min=1"` } // GetPage get page parameters func GetPage(c *gin.Context) (int, int) { currentPage := 0 v, _ := c.Get("trans") trans, ok := v.(ut.Translator) if !ok { trans, _ = common.Uni.GetTranslator("zh") } var p Page if err := c.ShouldBindQuery(&p); err != nil { log.Println(err) } err := common.Validate.Struct(p) if err != nil { errs := err.(validator.ValidationErrors) var sliceErrs [] string for _, e := range errs { sliceErrs = append(sliceErrs, e.Translate(trans)) } log.Println(sliceErrs) } //if page > 0 { // currentPage = (page - 1) * limit //} return currentPage, 0 } 1 byte404 Aug 29, 2019 via Android 不传大写的人家外面咋调用哇 |
2 JRyan Aug 29, 2019 你把 p 结构体打出来,看是不是没 bind 上数据,validate 是验证结构体里的数据的 |
3 StarUDream Aug 29, 2019 试试 `form` ```go type Page struct { P uint `json:"p" form:"p" validate:"required,min=1"` N uint `json:"n" form:"n" validate:"required,min=1"` } ``` [https://github.com/gin-gonic/gin#only-bind-query-string]( https://github.com/gin-gonic/gin#only-bind-query-string) |
4 userff OP |