gpt4 book ai didi

json - 请求正文验证

转载 作者:行者123 更新时间:2023-12-03 02:23:27 25 4
gpt4 key购买 nike

我使用 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 中请求正文验证的最佳实践或模式是什么?

最佳答案

注册验证程序包: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 "
}

关于json - 请求正文验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58601947/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com