Spring MVC @ Validação válida com o Custom HandlerMethodArgumentResolver

Quero registrar um costumeHandlerMethodArgumentResolver que poderia lidar com o seguinte@Controller definição de método do manipulador

@RequestMapping(method = RequestMethod.POST)
public String createDomain(@Valid Domain domain, BindingResult errors, @RequestParam("countryId") Long countryId) {

Eu posso registrar meu resolvedor, que apenas cria umDomain objeto através de parâmetros de solicitação, substituindoaddArgumentResolver() deWebMvcConfigurerAdapter. Quando Spring tenta resolver oDomain parâmetro, ele passa por sua lista deHandlerMethodArgumentResolver (há muito) e escolhe o primeiro quesupports() isto.

No exemplo acima, embora meu resolvedor seja chamado e meuDomain argumento será inicializado, o@Valid a anotação não será processadae o resolvedor paraBindingResult, aErrorsMethodArgumentResolver irá falhar porque requer um@ModelAttribute, @RequestBody ou o@RequestPart argumento no método handler, que eu não tenho.

Se eu tentar corrigi-lo adicionando@ModelAttribute

@RequestMapping(method = RequestMethod.POST)
public String createDomain(@Valid @ModelAttribute Domain domain, BindingResult errors, @RequestParam("countryId") Long countryId) {

a HandlerMethodArgumentResolver implementação,ModelAttributeMethodProcessor, será verificado primeiro comsupports() e resolver o argumento (com@ModelAttribute e@Valid) antes do meu resolvedor personalizado. oBindingResult não falhará, mas não terei meu comportamento de criação personalizado noDomain instância.

Eu poderia apenas copiar e colar o código para validação e adicionar ao modelo que está emModelAttributeMethodProcessor, mas eu esperava que houvesse uma maneira mais fácil de resolver meus parâmetros e realizar a validação sem adicionar um objeto ao modelo. Existe tal caminho?

questionAnswers(2)

yourAnswerToTheQuestion