如何解决GO“ozzo-validation”中的验证
我不擅长 GO :) 只是尝试使用 crud
和名为 ozzo-validation
的插件创建简单的 gin
抛出它
我的代码:
package models
import (
validation "github.com/go-ozzo/ozzo-validation"
"gorm.io/gorm"
)
type Post struct {
gorm.Model
Name string `gorm:"type:varchar(255);"`
Desc string `gorm:"type:varchar(500);"`
}
type PostData struct {
Name string `json:"name"`
Desc string `json:"desc"`
}
func (p PostData) Validate() error {
return validation.ValidateStruct(&p,validation.Field(&p.Name,validation.Required,validation.Length(5,20)),validation.Field(&p.Desc,validation.Required),)
}
后控制器:
package controllers
import (
"curd/app/models"
"fmt"
"github.com/gin-gonic/gin"
)
func Store(c *gin.Context) {
// Validate Input
var post models.PostData
err := post.Validate()
fmt.Println(err)
}
{
"name": "sdfsdfsfsdf"
}
问题是一旦我从邮递员那里提交了上述 JSON 数据,验证就会在终端中给我这个:
desc: cannot be blank; name: cannot be blank.
解决方法
如评论中所述,您需要先将 HTTP 请求中的数据解码为结构体,然后才能执行验证。您看到的验证错误是在 Validate()
结构的新实例(每个字段中的值为零)上调用 Post
的产物。试试this。
func Store(c *gin.Context) {
var post models.PostData
// This will infer what binder to use depending on the content-type header.
if err := c.ShouldBind(&post); err != nil {
c.JSON(http.StatusBadRequest,gin.H{"error": err.Error()})
return
}
// Validate Input
err := post.Validate()
fmt.Println(err)
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。