我想注册一个HandlerMethodArgumentResolver
可以处理以下@Controller
处理程序方法定义的自定义
@RequestMapping(method = RequestMethod.POST)
public String createDomain(@Valid Domain domain, BindingResult errors, @RequestParam("countryId") Long countryId) {
我可以注册我的解析器,它只是Domain
通过请求参数创建一个对象,方法是addArgumentResolver()
从WebMvcConfigurerAdapter
. 当 Spring 尝试解析Domain
参数时,它会遍历其列表HandlerMethodArgumentResolver
(有很多)并选择supports()
它的第一个。
在上面的示例中,虽然我的解析器将被调用并且我的Domain
参数将被初始化,但@Valid
注释不会被处理,并且解析器将失败BindingResult
,ErrorsMethodArgumentResolver
因为它需要 a或处理程序方法中的@ModelAttribute
参数,而我没有没有。@RequestBody
@RequestPart
如果我尝试通过添加来修复它@ModelAttribute
@RequestMapping(method = RequestMethod.POST)
public String createDomain(@Valid @ModelAttribute Domain domain, BindingResult errors, @RequestParam("countryId") Long countryId) {
一个HandlerMethodArgumentResolver
实现 ,ModelAttributeMethodProcessor
将在我的自定义解析器之前首先检查supports()
并解析参数(使用@ModelAttribute
and )。不会失败,但我不会在实例上拥有我的自定义创建@Valid
行为。BindingResult
Domain
我可以复制粘贴代码进行验证并添加到 中的模型ModelAttributeMethodProcessor
,但我希望有一种更简单的方法来解析我的参数并执行验证,而无需向模型添加对象。有没有这样的方法?