感谢这个question ,我想我了解验证是如何工作的。
对于 JPA,我们有一个名为 JSR-303 的规范,解释了 Bean Validation 应该如何工作,然后我们也使用常用的 Hibernate Validator 或 Apache BVal 等实现。
我正在努力在代码的某些部分使用@Valid
。我没有使用 @Validated
因为我不需要组验证。
您可以找到演示项目的示例 here
在 PropertyExample
类中,您可以看到我标记了我的类以进行 Bean 验证。
当使用@Validated
时,一切都按预期工作,因为我违反了application.yml
文件中的约束。
当在 @Validated
上使用 @Valid
时,似乎什么也没有发生。我不明白为什么。
我还看到这些注释可以在 ElementType.PARAMETER
上使用,但是当我在构造函数初始化期间使用它们时,验证似乎也不会触发。
有关如何使用这些注释(尤其是 @Valid
)的说明将不胜感激。
最佳答案
它在使用 Validated 时有效,而在使用 Valid 时无效,因为 Spring Boot 要求属性类在您希望对其进行验证时使用 Validated 进行注释。请参阅documentation :
Spring Boot attempts to validate @ConfigurationProperties classes whenever they are annotated with Spring’s @Validated annotation
[...]
You can also trigger validation by annotating the @Bean method that creates the configuration properties with @Validated.
请注意,他们不可能允许在属性类上使用 Valid,因为 Valid 注释不适用于类。
关于java - Spring 中 @Valid 与 @Validated 的用法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56817075/