【问题标题】:will javax validation annotations work on object fields which is in listjavax 验证注释是否适用于列表中的对象字段
【发布时间】:2016-05-20 08:39:32
【问题描述】:

我正在使用javax.validation.constraints 注释来验证对象中的手机号码字段。
该对象在列表中。

这个注释不起作用,有什么问题?

【问题讨论】:

  • 你在哪里应用@NotNull 约束?通过 samplePhoneInfo 还是通过 SamplePhoneRequest 中的 phoneId ?
  • @pattern(regex =somepattern) on phoneNumber
  • 知道了,错过了@valid

标签: java validation


【解决方案1】:

当我们在一个对象中声明一个对象时。 javax.validation 的验证不能直接用于嵌套对象。

为了验证嵌套引用对象有自己的字段,我们需要在父对象中用@Valid注解标记或注解这个嵌套引用对象。

然后 javax.validation 将在 javax.validation 实现提供者的帮助下验证嵌套对象的约束,例如 hibernate 验证器。

@Valid 也适用于collection-typed 字段。 在集合类型字段的情况下,每个集合元素都将被验证

在集合之后,@Valid 支持类型

  • 数组

  • 任何集合都实现了 java.lang.Iterable(尤其是 Collection、List 和 Set)

  • 对象实现 java.util.Map

对于您的用例,在父对象中使用 @Valid 注释标记或注释 samplePhoneInfo 数组列表,并使用所需的注释或正则表达式模式标记或注释 phoneNumber

您也可以在以下 URL 上进行检查。它是对官方休眠验证器文档的参考。

https://docs.jboss.org/hibernate/validator/4.1/reference/en-US/html/validator-usingvalidator.html#d0e410

【讨论】:

    【解决方案2】:

    错过了@valid注解

    验证 在绑定用户输入后验证模型是很常见的 给它。 Spring 3 提供了对声明式验证的支持 JSR-303。如果 JSR-303 提供程序,此支持会自动启用, 例如 Hibernate Validator,存在于您的类路径中。什么时候 启用,您可以简单地通过注释控制器来触发验证 带有@Valid注解的方法参数:绑定传入后 POST 参数,AppointmentForm 将被验证;在这种情况下, 验证日期字段值不为空且在未来发生。

    【讨论】:

      猜你喜欢
      • 2021-01-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-07-30
      • 2020-03-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多