Spring MVC @Valid Validation mit benutzerdefiniertem HandlerMethodArgumentResolver

Ich möchte einen Zoll registrierenHandlerMethodArgumentResolver das könnte das folgende behandeln@Controller Definition der Handler-Methode

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

Ich kann meinen Resolver registrieren, der gerade einen erstelltDomain Objekt durch Anforderungsparameter, durch ÜberschreibenaddArgumentResolver() vonWebMvcConfigurerAdapter. Wenn der Frühling versucht, das Problem zu lösenDomain Parameter, geht es durch seine Liste vonHandlerMethodArgumentResolver (es gibt eine Menge) und wählt die erste, diesupports() es.

Im obigen Beispiel wird zwar mein Resolver aufgerufen und meinDomain Argument wird initialisiert, die@Valid Anmerkung wurde nicht verarbeitetund der Resolver fürBindingResult, einErrorsMethodArgumentResolver wird scheitern, weil es ein erfordert@ModelAttribute, @RequestBody oder der@RequestPart Argument in der Handler-Methode, die ich nicht habe.

Wenn ich versuche, es durch Hinzufügen zu beheben@ModelAttribute

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

a HandlerMethodArgumentResolver Implementierung,ModelAttributeMethodProcessorwird zuerst mit überprüftsupports() und lösen Sie das Argument (mit@ModelAttribute und@Valid) vor meinem Custom Resolver. DasBindingResult wird nicht scheitern, aber ich habe mein benutzerdefiniertes Erstellungsverhalten nicht auf derDomain Beispiel.

Ich könnte einfach den Code zur Validierung kopieren, einfügen und zu dem Modell hinzufügen, in dem er enthalten istModelAttributeMethodProcessorIch hatte jedoch die Hoffnung, dass es einfacher ist, meine Parameter aufzulösen und eine Validierung durchzuführen, ohne dem Modell ein Objekt hinzuzufügen. Gibt es so einen Weg?

Antworten auf die Frage(2)

Ihre Antwort auf die Frage