Spring 支持两种不同的验证方法:Spring 验证和 JSR-303 bean 验证。两者都可以通过定义一个 Spring 验证器来使用,该验证器委托给包括 bean 验证器在内的其他委托器。到目前为止,一切都很好。
但是当注释方法以实际请求验证时,那就是另一回事了。我可以这样注释
@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 而设计。
这没有多大帮助,因为它没有确切说明它有何不同。如果有的话。两者似乎对我来说都很好。
原文由 Sergei Tachenov 发布,翻译遵循 CC BY-SA 4.0 许可协议
正如您从文档中引用的那样,添加了
@Validated
以支持“验证组”,即验证 bean 中的字段组。这可以用于多步骤表单,您可以在第一步中验证姓名、电子邮件等,然后在后续步骤中验证其他字段。之所以没有将其添加到
@Valid
注释中,是因为它是使用 java 社区流程 (JSR-303) 进行标准化的,这需要时间,而 Spring 开发人员希望让人们更快地使用此功能。转到 这个 jira ticket 看看注释是如何产生的。