validate icon indicating copy to clipboard operation
validate copied to clipboard

怎么样才能验证内嵌结构体呢?

Open liuv3v6 opened this issue 2 years ago • 2 comments

如:

type A struct {
	T1 string `validate:"required"`
	T2 string `validate:"required"`
}
type B struct {
	T1 string `json:"T1,omitempty"`  // is not required
	A
}

原先有一个A结构体,在A结构体上扩展出B(相当于B继承了A, 然后T1字段想把它改为非required) 前端传过来一个 {T2:"xxx"} 可以验证通过 ,解析JSON后,B的值为 {T1:"", A { T2:"xxx" }}

希望老哥能够解答,先谢谢了!

liuv3v6 avatar Jun 29 '22 09:06 liuv3v6

你是指验证有问题吗? 还是说 为啥 A.T1 没有值

inhere avatar Jun 30 '22 05:06 inhere

你是指验证有问题吗? 还是说 为啥 A.T1 没有值

验证有问题,我想实现一个类似继承的功能,在B结构体中重写A的规则。A中是必须的么,但是想在B中修改A为非必须,然后可以验证通过。

ghost avatar Jul 03 '22 03:07 ghost

这种不行的 虽然都叫 T1 实际上是两个字段了。

  • B.T1 不会验证
  • B.A.T1 还是会验证的

如果只是有时想验证T1,可以配置场景:


// ConfigValidation config the Validation
// eg:
// - define validate scenes
func (f A) ConfigValidation(v *validate.Validation) {
	v.WithScenes(validate.SValues{
		"update": []string{"T2"},
	})
}

// 验证时指定场景 - 只验证 T2
a := &A{T2: "val"}
v := validate.Struct(a, "update")
v.Validate() // True

inhere avatar Aug 24 '22 15:08 inhere