当前位置: 首页 > 面试题库 >

使用Java Bean验证来验证String数组的元素

毛弘博
2023-03-14
问题内容

我有一个简单的类,其属性之一为String数组。根据本文档,在数组,集合等上使用@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有一些限制吗?


问题答案:

通过@Valid像完成操作一样添加注释,验证算法将应用于每个元素(元素约束的验证)。

在您的情况下,String类没有约束。@Pattern您添加的约束将应用于数组,而不是应用于数组的每个元素。由于@Pattern不能将约束应用于数组,因此会收到错误消息。

您可以为数组创建自定义验证约束(有关更多信息,请参见Hibernate文档),也可以使用包装器类(如@Jordi Castilla)。



 类似资料:
  • 我有以下场景:我正在尝试处理一个表单,模型属性是一个具有String和Long属性的bean。众所周知,bean验证提供了很多注释来帮助我们确定数据的有效性。我面临的是,对于Long属性的情况,我只能使用@NotNull和另一个注释(我不记得它的名字)来强制用户输入正数。如果用户输入例如“sdf”,应用程序会抛出一个BIG异常。所以我想知道的是,如果用户在爆炸前输入了一个数字(因为我不能使用@Pa

  • 我是一个新手,我正在使用java bean验证。 我有一个java bean类,如下所示,带有null和size约束。 我的主要课程如下 当我传递长度小于4的名称时,这将引发错误。但是对于我传递的所有值,这个类都成功地执行了。让我知道我错过了什么。 提前谢谢。

  • 我使用Jersey 2.19来实现REST API,但是我很难让资源验证像我预期的那样工作。 我的资源是这样的。 当我发出以下cURL请求时: 我在终端窗口中得到以下响应: 也就是说,的值是,正如Java EE教程中定义的那样,不会引发异常。

  • 我正在尝试使用自定义Bean验证来验证应该大于零的数值,但问题是使用如下单个自定义验证器来验证任何数值:整数、浮点数、双......: 整数int; @PositiveNumber双倍双; 这可能吗?

  • 我有一个数组对象作为道具传递数组看起来像: 我想做的是添加propTypes验证,比如 标题:道具类型。一串需要 sub_items:PropTypes.array sub_items:数组内的道具验证,如标题刺痛和isDriningboolean。 请注意如何在阵列上实现这一点。(注:我的知识非常有限,所以如果我问了一个明显愚蠢的问题,请原谅)

  • 我正在用以下组件构建自己的证书链: 根证书是自签名证书,中间证书由根证书和用户由中间证书签名。 现在我想验证一个用户证书是否有其根证书的锚。 具有 验证是可以的。在下一步中,我将使用 验证结果显示 什么是错的?