Spring MVC和@Validate:仅在特定条件下或用户更改属性时执行验证
控制器方法期望一个@NotNull @Valid @ModelAttribute Person
。 Person
有一个@Valid Address
address属性。
开启时,PersonController.create(@NotNull @Valid @ModelAttribute Person person,
BindingResult bindingResult...)仅当用户设置地址的任何字段或基于人员实例的字段值(例如person.hasAddress =
true)时,我才需要验证person.address。
问题是默认情况下spring会创建一个Address的新实例,该实例在createForm commit上提交,但在验证时失败。
我在Person中创建了一个跨属性验证,该验证要求在hasAddress = true的情况下地址不能为null,但是无法解决地址字段中验证的问题。
我尝试使用@InitBinder("address")
/
@InitBinder("person.address")
进行设置,binder.setAutoGrowNestedPaths(false);
但无法接通此电话。全局使用@InitBinder会导致其他属性出现其他问题。
我在考虑组,但是只有在知道开发时间时才可以使用,如果您不愿进行验证。就我而言,将基于对地址或hasAddress字段的任何更改在提交时知道
任何的想法?
回答:
@Valid
从地址字段中删除了- 手动进行验证:在
create
控制器的方法内部:validateAddressIfNeeded(person, bindingResult)
private void validateAddressIfNeeded(Person person, BindingResult bindingResult) {
if (person.hasAddress()) {
bindingResult.pushNestedPath("address");
validator.validate(person.getAddress(), bindingResult);
bindingResult.popNestedPath();
}
}
以上是 Spring MVC和@Validate:仅在特定条件下或用户更改属性时执行验证 的全部内容, 来源链接: utcz.com/qa/430391.html