Spring MVC @ Valid Validation con HandlerMethodArgumentResolver personalizado
Quiero registrar una costumbreHandlerMethodArgumentResolver
que podria manejar lo siguiente@Controller
definición del método del controlador
@RequestMapping(method = RequestMethod.POST)
public String createDomain(@Valid Domain domain, BindingResult errors, @RequestParam("countryId") Long countryId) {
Puedo registrar mi resolución, lo que crea unDomain
objeto a través de los parámetros de solicitud, anulandoaddArgumentResolver()
desdeWebMvcConfigurerAdapter
. Cuando la primavera intenta resolver elDomain
Parámetro, pasa por su lista deHandlerMethodArgumentResolver
(hay muchos) y elige el primero quesupports()
eso.
En el ejemplo anterior, aunque mi resolutor será llamado y miDomain
el argumento se inicializará, el@Valid
la anotación no habrá sido procesaday el resolver paraBindingResult
, unErrorsMethodArgumentResolver
fallará porque requiere una@ModelAttribute
, @RequestBody
o la@RequestPart
argumento en el método de controlador, que no tengo.
Si intento arreglarlo agregando@ModelAttribute
@RequestMapping(method = RequestMethod.POST)
public String createDomain(@Valid @ModelAttribute Domain domain, BindingResult errors, @RequestParam("countryId") Long countryId) {
a HandlerMethodArgumentResolver
implementación,ModelAttributeMethodProcessor
, será revisado primero consupports()
y resolver el argumento (con@ModelAttribute
y@Valid
) antes de mi resolución personalizada. losBindingResult
no fallará, pero no tendré mi comportamiento de creación personalizado en elDomain
ejemplo.
Podría copiar y pegar el código para validarlo y agregarlo al modelo que está enModelAttributeMethodProcessor
, pero esperaba que hubiera una manera más fácil de resolver mis parámetros y realizar la validación sin agregar un objeto al modelo. ¿Hay tal manera?