У меня есть форма, которую я хочу проверить.Он содержит 2 переменные адреса.адрес1 всегда должен быть проверен, адрес2 должен быть проверен на основе некоторых условий
public class MyForm {
String name;
@Valid Address address1;
Address address2;
}
public class Address {
@NotEmpty
private String street;
}
мой контроллер автоматически проверяет и связывает мою форму obj
@RequestMapping(...)
public ModelAndView edit(
@ModelAttribute("form")
@Valid
MyForm form,
BindingResult bindingResult,
...)
if(someCondition) {
VALIDATE form.address2 USING JSR 303
проблема в том, что если я используювалидатор LocalValidatorFactoryBean. Я не могу повторно использовать объект BinidingResult, предоставленный Spring.Привязка не будет работать, поскольку целевой объект 'result' - это '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 для принятия некоторой строки для добавления к имени поля. У вас есть лучший подход?