如何在Spring MVC的@RequestBody参数中使用@Valid?

Han*_*Gay 20 data-binding validation spring spring-mvc bean-validation

我在使用@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)
Run Code Online (Sandbox Code Playgroud)

其中Widget一个域对象的类在哪里.我正在使用@RequestBody注释来指示请求的有效负载映射到widget(在我的测试中,请求是JSON,尽管Jackson在我的类路径上,所以我也可以使用XML).

如您所见,该BindingResult参数紧跟在Widget参数之后,但是我收到以下错误:

java.lang.IllegalStateException: Errors/BindingResult argument declared without preceding model attribute. Check your handler method signature!
Run Code Online (Sandbox Code Playgroud)

如何将@Valid注释应用于@RequestBody参数然后获得结果?

PS我正在annotation-driven用来处理控制器的连接,进行内容协商等.

Rit*_*esh 9

你在使用Spring 3.1吗?它是Spring 3.1版中新增的功能.请参阅验证@RequestBody方法参数

  • 我在3.1中试过这个,但我仍然遇到了这个问题. (3认同)
  • 更好的博客文章:http://blog.goyello.com/2011/12/16/enhancements-spring-mvc31/ (2认同)