Spring MVC @ Valid Validation z niestandardowym HandlerMethodArgumentResolver
Chcę zarejestrować zwyczajHandlerMethodArgumentResolver
które mogłyby obsłużyć następujące@Controller
definicja metody obsługi
@RequestMapping(method = RequestMethod.POST)
public String createDomain(@Valid Domain domain, BindingResult errors, @RequestParam("countryId") Long countryId) {
Mogę zarejestrować mój resolver, który po prostu tworzyDomain
obiekt poprzez parametry żądania, przez przesłanianieaddArgumentResolver()
zWebMvcConfigurerAdapter
. Kiedy Spring próbuje rozwiązaćDomain
parametr, przechodzi przez jego listęHandlerMethodArgumentResolver
(jest ich dużo) i wybiera pierwszysupports()
to.
W powyższym przykładzie, mój resolver zostanie wywołany i mójDomain
argument zostanie zainicjowany@Valid
adnotacja nie została przetworzonai przelicznik dlaBindingResult
, anErrorsMethodArgumentResolver
nie powiedzie się, ponieważ wymaga@ModelAttribute
, @RequestBody
albo@RequestPart
argument w metodzie obsługi, której nie mam.
Jeśli spróbuję to naprawić dodając@ModelAttribute
@RequestMapping(method = RequestMethod.POST)
public String createDomain(@Valid @ModelAttribute Domain domain, BindingResult errors, @RequestParam("countryId") Long countryId) {
a HandlerMethodArgumentResolver
realizacja,ModelAttributeMethodProcessor
, zostanie najpierw sprawdzonysupports()
i rozwiń argument (za pomocą@ModelAttribute
i@Valid
) przed moim niestandardowym tłumaczeniem. TheBindingResult
nie zawiedzie, ale nie będę mieć niestandardowego zachowania podczas tworzeniaDomain
instancja.
Mógłbym po prostu skopiować i wkleić kod w celu sprawdzenia poprawności i dodania do modelu, który jest wModelAttributeMethodProcessor
, ale miałem nadzieję, że istnieje łatwiejszy sposób na rozwiązanie moich parametrów i sprawdzenie poprawności bez dodawania obiektu do modelu. Czy istnieje taki sposób?