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,ModelAttributeMethodProcessor
wird 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 istModelAttributeMethodProcessor
Ich 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?