在春季使用@Valid与@Validated

时间:2019-06-29 11:10:44

标签: java spring validation bean-validation

感谢这个question,我想我知道验证的工作原理。

对于JPA,这里有一个称为JSR-303的规范,解释了Bean验证应如何工作,然后我们使用的是诸如常用的Hibernate Validator或Apache BVal之类的实现。

我正在努力在代码的某些部分中使用@Valid。我没有使用@Validated,因为我不需要组验证。

您可以找到一个演示项目的示例here

PropertyExample类中,您可以看到我标记了我的类以进行bean验证。

使用@Validated时,一切正常,因为我违反了application.yml文件中的约束。 在@Valid上使用@Validated时,似乎什么也没发生。我不明白为什么。

我也看到这些注释可以在ElementType.PARAMETER上使用,但是当我在构造函数初始化期间使用它们时,验证似乎也不会触发。

对如何使用这些注释(尤其是@Valid)进行解释将非常感激。

1 个答案:

答案 0 :(得分:1)

它在使用Validated时有效,而在使用Valid时无效,这仅仅是因为Spring Boot要求对属性类进行验证(如果您希望对其进行验证)。参见documentation

  

每当使用Spring的@Validated批注进行批注时,Spring Boot就会尝试验证@ConfigurationProperties类

     

[...]

     

您还可以通过使用@Validated注释创建配置属性的@Bean方法来触发验证。

请注意,由于Valid注释不适用于类,因此它们可能不允许在属性类上使用Valid。