【问题标题】:Spring MVC 3 exception : An Errors/BindingResult argument is expectedSpring MVC 3 异常:需要一个 Errors/BindingResult 参数
【发布时间】:2012-02-05 01:50:04
【问题描述】:

我在以下方法上遇到了异常:

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

抛出以下异常:

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

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

它甚至出现在异常中。

我错过了什么?

【问题讨论】:

    标签: java spring-mvc


    【解决方案1】:

    原来解决这个问题的方法是完全删除BindingResult 属性。

    有效的签名是:

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

    正如this blog post. 上第 3 点所提示的那样

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        【解决方案3】:

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

        【讨论】:

          猜你喜欢
          • 2012-05-14
          • 1970-01-01
          • 1970-01-01
          • 2012-05-30
          • 1970-01-01
          • 2015-06-18
          • 2011-03-05
          • 1970-01-01
          • 2018-05-04
          相关资源
          最近更新 更多