java - 使用 Java Bean Validation 验证字符串数组的元素

标签 java bean-validation indexed-properties

我有一个简单的类,它的属性之一是字符串数组。根据this文档中,在数组、集合等上使用@Valid将递归地验证数组/集合的每个元素。

@Valid
@Pattern(regexp="^[_ A-Za-z0-9]+$")
public String[] defaultAppAdminRoles;

属性上的上述注释会生成以下异常:

Exception in thread "main" javax.validation.UnexpectedTypeException: No validator could be found for type java.lang.String[]. See: @Pattern at public java.lang.String[] com.hm.vigil.platform.ops.model.Application.defaultAppAdminRoles
at org.apache.bval.jsr303.AnnotationProcessor.checkOneType(AnnotationProcessor.java:326)
at org.apache.bval.jsr303.AnnotationProcessor.getConstraintValidator(AnnotationProcessor.java:301)
at org.apache.bval.jsr303.AnnotationProcessor.applyConstraint(AnnotationProcessor.java:241)
at org.apache.bval.jsr303.AnnotationProcessor.processAnnotation(AnnotationProcessor.java:149)
at org.apache.bval.jsr303.AnnotationProcessor.processAnnotations(AnnotationProcessor.java:90)
at org.apache.bval.jsr303.Jsr303MetaBeanFactory.processClass(Jsr303MetaBeanFactory.java:134)
at org.apache.bval.jsr303.Jsr303MetaBeanFactory.buildMetaBean(Jsr303MetaBeanFactory.java:95)
at org.apache.bval.MetaBeanBuilder.buildForClass(MetaBeanBuilder.java:131)
at org.apache.bval.MetaBeanManager.findForClass(MetaBeanManager.java:102)
at org.apache.bval.jsr303.ClassValidator.validate(ClassValidator.java:140)
at com.hm.vigil.platform.commons.AbstractValidatable.isValid(AbstractValidatable.java:33)
at com.hm.vigil.platform.ops.model.Application.main(Application.java:54)

我使用 Apache BVal 作为验证提供程序。

问题,上面的方法正确吗?

如果不正确,使用 bean 验证来验证数组/集合的正确方法是什么?

如果正确,那么是否是 Apache BVal 的某些限制?

最佳答案

另一件事值得一提的是 Java 8 中引入的类型注释,它允许您注释参数化类型

private List<@MyPattern String> defaultAppAdminRoles;

它尚未包含在 bean-validation 标准中(肯定会在下一个版本中),但已在 hibernate-validator 5.2.1 中提供。 Blog entry此处了解更多信息。

关于java - 使用 Java Bean Validation 验证字符串数组的元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39201518/

相关文章:

java - 快速 Flex 和 Java 教程

java - 如何使用PropertyUtils获取arraylist的属性

java - java中utf8的问题

java - 如何更改 Apache Commons 电子邮件中的字符集?

java - 如果我在 jsr 303 中使用两个自定义注释,如果第一个验证失败,如何停止对第二个注释的验证?

jpa - 在合并/持久化之前指定 bean 验证组?

java - WebLogic 部署成功,但有错误

c# - Moq 索引属性并在返回/回调中使用索引值

protobuf-net 如何在使用索引属性时避免崩溃

java - 安卓项目: Conversion to Dalvik format failed with error 1