一尘不染

Spring中@Valid和@Validated之间的区别

spring

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。

这并没有太大帮助,因为它无法确切说明两者的不同之处。如果有的话。两者似乎都对我来说很好。


阅读 1709

收藏
2020-04-13

共1个答案

一尘不染

正如你在文档中引用的那样,@Validated已添加该功能以支持“验证组”,即,经过验证的bean中的字段组。可以在多步骤表单中使用它,你可以在第一步中验证名称,电子邮件等,然后在后续步骤中验证其他字段。

之所以没有将其添加到@Valid注释中,是因为它使用Java社区流程(JSR-303)进行了标准化,这需要花费时间,Spring开发人员希望允许人们尽快使用此功能。

2020-04-13