我正在使用gin来处理请求,但是在验证请求正文中的数据时遇到了麻烦,例如
type User struct {
Username string `json:"username" binding:"required,min=1,max=16"`
Name string `json:"name" binding:"required,min=1,max=16"`
Password string `json:"password" binding:"required,min=1,max=16"`
}
func loginHandler(ctx *gin.Context) {
var user User
if err := ctx.ShouldBindJSON(&user); err != nil {
ctx.JSON(http.StatusBadRequest, gin.H{
"error": err.Error(),
})
}
如何处理带有" username "
或" John Doe "
这样的空格的值?据我所知,在gin的验证器中不可能使用正则表达式。
Golang中用于请求正文验证的最佳做法或模式是什么?
答案 0 :(得分:1)
Reg验证程序包:https://godoc.org/gopkg.in/validator.v2
// main.go
package main
import (
"net/http"
"github.com/gin-gonic/gin"
"gopkg.in/validator.v2"
)
type User struct {
Username string `json:"username" validate:"min=1,max=16,regexp=^[a-zA-Z]*$"`
Name string `json:"name" validate:"min=1,max=16"`
Password string `json:"password" validate:"min=1,max=16"`
}
func loginHandler(ctx *gin.Context) {
var user User
if err := ctx.ShouldBindJSON(&user); err != nil {
ctx.JSON(http.StatusBadRequest, gin.H{
"error": err.Error(),
})
}
if err := validator.Validate(user); err != nil {
ctx.JSON(http.StatusBadRequest, gin.H{
"error": err.Error(),
})
}
}
func main() {
r := gin.Default()
r.POST("/login", loginHandler)
r.Run()
}
请求:POST:localhost:8080 / login
{
"username":"123123",
"name":"golang",
"password":"gin"
}
响应:
{
"error": "Username: regular expression mismatch "
}