感谢这个question,我想我知道验证的工作原理。
对于JPA,这里有一个称为JSR-303的规范,解释了Bean验证应如何工作,然后我们使用的是诸如常用的Hibernate Validator或Apache BVal之类的实现。
我正在努力在代码的某些部分中使用@Valid
。我没有使用@Validated
,因为我不需要组验证。
您可以找到一个演示项目的示例here
在PropertyExample
类中,您可以看到我标记了我的类以进行bean验证。
使用@Validated
时,一切正常,因为我违反了application.yml
文件中的约束。
在@Valid
上使用@Validated
时,似乎什么也没发生。我不明白为什么。
我也看到这些注释可以在ElementType.PARAMETER
上使用,但是当我在构造函数初始化期间使用它们时,验证似乎也不会触发。
对如何使用这些注释(尤其是@Valid
)进行解释将非常感激。
答案 0 :(得分:1)
它在使用Validated时有效,而在使用Valid时无效,这仅仅是因为Spring Boot要求对属性类进行验证(如果您希望对其进行验证)。参见documentation:
每当使用Spring的@Validated批注进行批注时,Spring Boot就会尝试验证@ConfigurationProperties类
[...]
您还可以通过使用@Validated注释创建配置属性的@Bean方法来触发验证。
请注意,由于Valid注释不适用于类,因此它们可能不允许在属性类上使用Valid。