У меня есть веб-приложение Spring Boot, в котором поля моего компонента, поддерживающего форму, помечены Проверка компонента аннотации (см. учебное пособие Baeldung или документы весной. -й ). Например, поля в компонентах Customer могут быть аннотированы следующим образом:
@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
. В идеале мне вообще не нужно менять код контроллера.