我有一个Spring Boot Web应用程序,其中,我的表单支持Bean的字段都用Bean Validation注释(请参阅Baeldung's tutorial或the docs at spring.io)进行注释。例如,Customer bean上的字段可能像这样注释:
@NotBlank
@Pattern(regexp="[ \\.A-Za-z-]*")
private String firstName;
@DateTimeFormat(pattern="M/d/yyyy")
@NotNull
@Past
private Date DOB;
[我想知道的是:((如何)我可以实现一个查看多个字段的复杂验证?我的意思是,使用此框架。例如,假设我有一个字段Country
和一个字段ZipCode
,并且当且仅当ZipCode
等于@NotBlank
时,我希望Country
为"US"
,否则为可选。
[在我的控制器中,通过使用@Valid
批注非常轻松地触发了验证,并且错误附加到BindingResult
对象上。像这样:
@PostMapping("customer/{id}")
public String updateCustomer( @PathVariable("id") Integer id,
@Valid @ModelAttribute("form") CustomerForm form,
BindingResult bindingResult ) {
if (bindingResult.hasErrors()) {
return "customerview";
}
customerService.updateCustomer(form);
return "redirect:/customer/"+id;
}
我希望找到一种写此条件验证器的方法,该条件验证器也将由@Valid
注释触发,并将其错误消息附加到ZipCode
的BindingResult
字段中]。理想情况下,我根本不需要更改控制器代码。
您将获得有关创建自定义验证器类的帮助,以下链接将为您提供帮助:https://www.baeldung.com/spring-mvc-custom-validator#custom-validation
对于这种东西,您需要使用跨字段验证。请尝试: