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?