Validação condicional do Spring MVC e JSR-303 hibernação
Eu tenho um formulário que quero validar. Ele contém 2 variáveis de endereço. o endereço1 sempre deve ser validado, o endereço2 deve ser validado com base em algumas condições
public class MyForm {
String name;
@Valid Address address1;
Address address2;
}
public class Address {
@NotEmpty
private String street;
}
meu controlador valida automaticamente e vincula meu objeto obj
@RequestMapping(...)
public ModelAndView edit(
@ModelAttribute("form")
@Valid
MyForm form,
BindingResult bindingResult,
...)
if(someCondition) {
VALIDATE form.address2 USING JSR 303
o problema é que, se eu usar o validador LocalValidatorFactoryBean, não poderei reutilizar o objeto BinidingResult fornecido pelo Spring. A ligação não funcionará, pois o objeto de destino de 'resultado' é 'MyForm' e não 'Endereço'
validate(form.getAddress2(), bindingResult) //won't work
Gostaria de saber qual é a abordagem padrão / limpa para fazer a validação condicional.
Eu estava pensando em criar programaticamente um novo BindingResult no meu controlador.
final BindingResult bindingResultAddress2 = new BeanPropertyBindingResult(address2, "form");
validate(form.getAddress2(), bindingResultAddress2);
mas a Lista de erros que obtenho de bindingResultAddress2 não pode ser adicionada ao 'bindingResult geral', pois os nomes dos campos não estão corretos ('street' em vez de 'address2.street') e a ligação não funcionará.
Alguma abordagem suja seria estender o BeanPropertyBindingResult para aceitar alguma string a ser anexada ao nome dos campos. Você tem uma abordagem melhor?