最近在研究 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
Aumujun 2019-08-29 18:25:29 +08:00 via Android
不传大写的人家外面咋调用哇
|
2
JRyan 2019-08-29 18:50:00 +08:00
你把 p 结构体打出来,看是不是没 bind 上数据,validate 是验证结构体里的数据的
|
3
StarUDream 2019-08-29 19:35:19 +08:00 1
试试 `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
fhy1994 OP |