我正在发送一个请求,请求中包含一个URL and Content。验证是这样的,无论是URL还是震中都是强制性的。当URL为空时,当空字符串上的url validate失败时,程序将出错。
是否只有在url不为空的情况下才能运行URL验证?
这是我的代码片段。
func (d *Doc) UnmarshalJSON(bytearray []byte) error {
type doc struct {
ID ID `json:"id" validate:"omitempty,numeric"`
URL string `json:"url" validate:"required_without=Content,url"`
Content string `json:"content" validate:"required_without=Url"`
}
var d doc
if err := json.Unmarshal(bytearray, &d); err != nil {
return err
}
}发布于 2022-05-26 20:58:44
还有一个类似于回购范围内的问题的问题,建议使用结构级验证。
验证器示例中的示例用法:示例/结构级别/main.go#l48
以下是未经测试的,但应该是一个很好的起点:
import (
"json"
"gopkg.in/go-playground/validator.v9"
)
func init() {
validate.RegisterStructValidation(DocStructLevelValidation, doc{})
}
type doc struct {
ID ID `json:"id" validate:"omitempty,numeric"`
URL string `json:"url"`
Content string `json:"content"`
}
func DocStructLevelValidation(sl validator.StructLevel) {
d := sl.Current().Interface().(doc)
if d.URL == "" && d.Content == "" {
sl.ReportError(d.URL, "url", "URL", "urlcontentrequired", "")
sl.ReportError(d.Content, "content", "Content", "urlcontentrequired", "")
}
}
func (d *Doc) UnmarshalJSON(bytearray []byte) error {
var d doc
if err := json.Unmarshal(bytearray, &d); err != nil {
return err
}
}https://stackoverflow.com/questions/72381297
复制相似问题