【发布时间】:2011-09-02 00:36:01
【问题描述】:
我在 @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 是我的域对象之一的类。我使用@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 参数,然后得到结果?
附:我正在使用annotation-driven 来处理控制器的接线、进行内容协商等。
【问题讨论】:
-
我还在学习这一切,但是,尝试将属性命名为
@ModelAttribute("xyz") Widget widget。 -
@DecaniBass 将解决它不绑定我在@craftsman 答案的评论中提到的任何数据的问题吗?
-
我知道它是一个旧的 POST,但它对你有用吗?我正在使用 Spring 3.2。绑定有效,但不是@Valid。此处发布的问题 [stackoverflow.com/q/16174990/668650]
-
从控制器方法中移除参数
final BindingResult results, -
如果您在 Spring Boot 中使用 Kotlin,那么您必须在各个字段上使用
@field:Email、@field:NotNull等,以确保@Valid有效。有关信息,请按照以下方式:stackoverflow.com/questions/36515094/…
标签: spring validation data-binding spring-mvc bean-validation