Spring MVC 3异常:需要一个Errors / BindingResult参数

时间:2012-02-05 01:50:05

标签: java spring-mvc

我对以下方法有例外:

@Transactional
@RequestMapping(method=RequestMethod.PUT)
public @ResponseBody Account create(@Valid @RequestBody CreateAccountRequest request, BindingResult bindingResult)
{ ... 
}

引发以下异常:

  

java.lang.IllegalStateException:一个Errors / BindingResult参数是   预计会立即在模型属性参数之后   控制器方法签名:公共   com.mangofactory.concorde.domain.Account   com.mangofactory.concorde.api.AccountService.create(com.mangofactory.concorde.api.rpc.CreateAccountRequest,org.springframework.validation.BindingResult)

根据documentation,我需要添加BindingResult作为第二个参数。但是,我已经做到了。

它甚至出现在例外中。

我错过了什么?

3 个答案:

答案 0 :(得分:4)

事实证明,解决此问题的方法是完全删除BindingResult属性。

有效的签名是:

public @ResponseBody CreateAccountResponse create(@Valid @RequestBody CreateAccountRequest request)

这是this blog post.

上第3点的结果

答案 1 :(得分:3)

仅在@ModelAttribute参数之后才支持BindingResult。 @Valid和@RequestBody的组合引发了MethodArgumentNotValidException,默认情况下会将其转换为400错误代码。这在参考文档和@RequestMapping本身中都有记录。

答案 2 :(得分:0)

我认为你不需要@RequestBody,因为你的CreateAccountRequest类应该已经指定哪些参数绑定到哪些类型/变量(因此无需使用HttpMessageConverters Spring提供)