У меня есть форма, которую я хочу проверить. Он содержит 2 адресные переменные. адрес1 всегда должен проверяться, адрес2 должен проверяться на основе некоторых условий
public class MyForm {
String name;
@Valid Address address1;
Address address2;
}
public class Address {
@NotEmpty
private String street;
}
мой контроллер автоматически проверяет и связывает мой объект формы
@RequestMapping(...)
public ModelAndView edit(
@ModelAttribute("form")
@Valid
MyForm form,
BindingResult bindingResult,
...)
if(someCondition) {
VALIDATE form.address2 USING JSR 303
проблема в том, что если я использую валидатор LocalValidatorFactoryBean, я не могу повторно использовать объект BinidingResult, предоставленный Spring. Привязка не будет работать, так как целевым объектом «результата» является «MyForm», а не «Address».
validate(form.getAddress2(), bindingResult) //won't work
Мне интересно, какой стандартный/чистый подход к условной проверке.
Я думал программно создать новый BindingResult в моем контроллере.
final BindingResult bindingResultAddress2 = new BeanPropertyBindingResult(address2, "form");
validate(form.getAddress2(), bindingResultAddress2);
но тогда список ошибок, который я получаю от bindingResultAddress2, не может быть добавлен к общему «bindingResult», поскольку имена полей неверны («улица» вместо «address2.street»), и привязка не будет работать.
Некоторым грязным подходом было бы расширить BeanPropertyBindingResult, чтобы принять некоторую строку для добавления к имени поля. У вас есть лучший подход?