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
, но я надеялся, что есть более простой способ разрешить мои параметры и выполнить проверку без добавления объекта в модель. Есть ли такой способ?