【发布时间】:2016-07-10 11:00:01
【问题描述】:
Spring 支持两种不同的验证方法:Spring 验证和 JSR-303 bean 验证。两者都可以通过定义一个委托给其他委托者(包括 bean 验证器)的 Spring 验证器来使用。到目前为止一切顺利。
但是,当注释方法以实际请求验证时,就另当别论了。我可以这样注释
@RequestMapping(value = "/object", method = RequestMethod.POST)
public @ResponseBody TestObject create(@Valid @RequestBody TestObject obj, BindingResult result) {
或者像这样
@RequestMapping(value = "/object", method = RequestMethod.POST)
public @ResponseBody TestObject create(@Validated @RequestBody TestObject obj, BindingResult result) {
这里,@Valid 是 javax.validation.Valid,@Validated 是 org.springframework.validation.annotation.Validated。后者的文档说
JSR-303 Valid 的变体,支持验证规范 团体。专为方便使用 Spring 的 JSR-303 支持而设计,但 不是 JSR-303 特定的。
这并没有多大帮助,因为它并不能准确地说明它有何不同。如果有的话。两者似乎对我来说都很好。
【问题讨论】:
-
“支持验证组的规范”是一个非常明确的说法。
-
我应该认为 Valid 与 JSR 303 验证(NotNull 等)紧密结合。而您可以创建其他验证/组并将它们签入 Validated。
-
@zeroflagL,是的,但由于我从未使用过它,所以我错过了重点,而是专注于“非 JSR-303 特定”部分。现在很清楚了。
标签: java spring validation spring-mvc