java - Spring 中 @Valid 与 @Validated 的用法

标签 java spring validation bean-validation

感谢这个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/

相关文章:

spring - 将 Spring Boot 与嵌入式服务器一起使用的优缺点是什么

html - 如何国际化html页面

java - Spring MVC - 从另一个休息服务内部调用休息服务

java - Spring + Thymeleaf 自定义验证展示

javascript - 日期验证年份失败

java - 创建一个可以被 Eclipse 和 Netbeans 理解的 Java 桌面用户界面

java - Controller 和过滤器已初始化但未被调用

java - 移动人工智能的最佳方式是什么? LibGDX - PONG 游戏

java - 如何将使用 'this' 的语句声明为静态?

jQuery + Coldfusion,isNumeric 未验证