带继承的 Spring 验证

Spring validation with inheritance

提问人:Ognjen Mišić 提问时间:6/18/2018 最后编辑:Branislav LazicOgnjen Mišić 更新时间:6/18/2018 访问量:8089

问:

我正在尝试验证一个 DTO(formModel,无论您喜欢什么术语),它有点分层(继承和依赖其他类)。

是否可以使以下模型配置正常工作:

public abstract class A {

    @NotNull
    private String fieldA1;

    @NotNull
    @Size(min = 2, max = 30)
    private String fieldA2;

    // ... and so on

}


public class B extends A {

    @NotNull
    private String fieldB1;

    @NotNull
    private Xyz fieldB2;

    // and so on
}


public class Xyz {

    @NotNull
    private String fieldXyz1;

    // etc..
}

弹簧架控制器:

@PostMapping(consumes = MediaType.APPLICATION_JSON_VALUE)
public ResponseEntity addCustomer(@RequestBody @Valid B customerDto, BindingResult bindingResult) {
// controller logic here
}

问题是:只有看似“有效”的约束注释才是父类 A 上的约束注释。我提交了一个 A 类中有错误字段的请求,返回 true。如果我提交的请求在类 B 或 Xyz 中带有错误字段,则为 false,控制器会继续表现得像请求正常一样。 有什么想法吗?bindingResult.hasErrors()bindingResult.hasErrors()

Java Spring Rest 验证

评论

1赞 Pavel Horal 6/18/2018
如果要验证对象字段,请使用注释。beanvalidation.org/1.0/spec/#d0e991@Valid
0赞 Ognjen Mišić 6/18/2018
这修复了我的对象字段,但是该怎么办?fieldB1
0赞 0gam 6/18/2018
以下链接:stackoverflow.com/questions/21841202/...
0赞 Pavel Horal 6/19/2018
您确定验证不起作用吗?那应该可以......也许您正在设置空字符串...在这种情况下,请使用(如果您使用的是 Hibernate 的 Bean 验证实现)。fieldB1@NotBlank
0赞 Ognjen Mišić 6/19/2018
是的,我最积极:)我已经重构了这个结构,只@Valid依赖对象而不是继承。不过,想知道为什么会发生这种情况

答: 暂无答案