Spring MVC @Valid Validation с пользовательским HandlerMethodArgumentResolver

Я хочу зарегистрировать кастомHandlerMethodArgumentResolver что может справиться со следующим@Controller определение метода обработчика

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

Я могу зарегистрировать свой преобразователь, который просто создаетDomain объект через параметры запроса, переопределяяaddArgumentResolver() изWebMvcConfigurerAdapter, Когда весна пытается решитьDomain параметр, он проходит через свой списокHandlerMethodArgumentResolver (есть много) и выбирает первый, которыйsupports() Это.

В приведенном выше примере, хотя мой решатель будет вызван и мойDomain аргумент будет инициализирован,@Valid аннотация не будет обработанаа также решатель дляBindingResult,ErrorsMethodArgumentResolver потерпит неудачу, потому что это требует@ModelAttribute, @RequestBody или@RequestPart аргумент в методе обработчика, которого у меня нет.

Если я попытаюсь это исправить, добавив@ModelAttribute

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

a HandlerMethodArgumentResolver реализация,ModelAttributeMethodProcessor, будет проверен первым сsupports() и решить аргумент (с@ModelAttribute а также@Valid) до моего пользовательского распознавателя.BindingResult не подведет, но у меня не будет моего собственного поведения при созданииDomain экземпляр.

Я мог бы просто скопировать и вставить код для проверки и добавления в модель, которая находится вModelAttributeMethodProcessor, но я надеялся, что есть более простой способ разрешить мои параметры и выполнить проверку без добавления объекта в модель. Есть ли такой способ?

Ответы на вопрос(2)

Ваш ответ на вопрос