【问题标题】:Usage of @Valid vs @Validated in Spring@Valid 与 @Validated 在 Spring 中的用法
【发布时间】:2019-11-11 00:18:10
【问题描述】:

感谢question,我想我了解了验证的工作原理。

至于 JPA,我们有一个名为 JSR-303 的规范来解释 Bean Validation 应该如何工作,然后我们也使用常用的 Hibernate Validator 或 Apache BVal 等实现。

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

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

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

使用@Validated 时,一切都按预期工作,因为我违反了application.yml 文件中的约束。 当使用@Valid 而不是@Validated 时,似乎没有任何反应。我不明白为什么。

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

非常感谢您解释如何使用这些注释(尤其是@Valid)。

【问题讨论】:

标签: java spring validation bean-validation


【解决方案1】:

它在使用 Validated 时有效,而在使用 Valid 时无效,这仅仅是因为 Spring Boot 需要使用 Validated 注释属性类,如果您希望它们被验证。见documentation

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

[...]

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

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

【讨论】:

  • 好吧,这是有道理的,但是我们什么时候使用@Valid呢?有什么用例吗?
  • 告诉验证器一个字段也必须被验证。或者验证 MVC 方法参数。 docs.oracle.com/javaee/7/api/javax/validation/Valid.html
  • 好的,所以它的行为就像一个标记。现在更清楚了,谢谢。
  • 请注意,它们不可能允许在属性类上使用 Valid,因为 Valid 注释不适用于类。
猜你喜欢
  • 2016-07-10
  • 2017-10-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-10-25
相关资源
最近更新 更多