我在@Valid
上的处理程序方法的参数上使用@Controller
时遇到问题。我的代码如下所示:
@RequestMapping(value=BIBBLE_BOBBLE_URI_PATTERN + "/widgets", method=RequestMethod.POST)
@ResponseBody
@ResponseStatus(HttpStatus.CREATED)
public Widget saveNewWidget(
@PathVariable final String username,
@PathVariable final String bibbleBobbleName,
@Valid @RequestBody final Widget widget,
final BindingResult results,
final HttpServletRequest request,
final HttpServletResponse response)
其中Widget
是我的一个域对象的类。我正在使用@RequestBody
注释来指示请求的有效负载映射到widget
(在我的测试中,请求是JSON,尽管Jackson在我的类路径上,所以我也可以使用XML)。
如您所见,BindingResult
参数紧跟在Widget
参数之后,但我收到以下错误:
java.lang.IllegalStateException: Errors/BindingResult argument declared without preceding model attribute. Check your handler method signature!
如何将@Valid
注释应用于@RequestBody
参数,然后获得结果?
P.S。我正在使用annotation-driven
来处理控制器的连线,进行内容协商等。
答案 0 :(得分:9)
您使用的是Spring 3.1吗?它是Spring 3.1版中新增的功能。请参阅Validation For @RequestBody Method Arguments
答案 1 :(得分:2)
这是春季3.0中的问题,它在3.1 M2中修复。
https://jira.springsource.org/browse/SPR-6709
如果您使用的是Spring 3.0,基于一些线程和大量阅读,这是解决此问题的最佳方法。面向方面的方法,以便我们可以在将其升级到修复此问题的spring版本时退出。
拦截对使用@RequestMapping注释的方法的调用以及对其具有@Valid注释的每个参数的方面,调用方面中的相应验证器。