我在对@Controller
上的处理程序方法的参数使用@Valid
时遇到了问题。我的代码如下所示:
@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
是我的一个域对象的类。我使用JSON注释来表示请求的有效负载映射到widget
(在我的测试中,请求是JSON,尽管Jackson在我的类路径上,所以我也可以使用@RequestBody
)。
正如您所看到的,BindingResult
参数紧跟在Widget
参数之后,但我得到了以下错误:
java.lang.IllegalStateException: Errors/BindingResult argument declared without preceding model attribute. Check your handler method signature!
如何对@RequestBody
参数应用@Valid
注释,然后获得结果?
附注:我正在使用annotation-driven
来处理控制器的布线、内容协商等。
发布于 2011-06-13 19:36:32
您使用的是Spring3.1吗?这是Spring版本3.1中新增的特性。请参阅Validation For @RequestBody Method Arguments
发布于 2011-10-19 01:20:36
这是spring 3.0中的一个问题,在3.1 M2中已修复。
https://jira.springsource.org/browse/SPR-6709
如果你使用的是Spring3.0,基于一些线程和广泛的阅读,这里是解决这个问题的最好方法。一种面向方面的方法,这样当您将其升级到修复此问题的spring版本时,我们可以退出。
一个方面,它拦截对使用@RequestMapping注释的方法的调用,并且对于每个具有@Valid注释的参数,调用方面中相应的验证器。
https://stackoverflow.com/questions/6129285
复制相似问题