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?

questionAnswers(3)

yourAnswerToTheQuestion