编程语言
首页 > 编程语言> > 逐场验证Java对象

逐场验证Java对象

作者:互联网

我正在对Java验证进行分析.

我需要构建一个模块,该模块使用注释并支持自定义域驱动的注释来逐字段验证对象[graph].最重要的方面是,不能拒绝无效对象(例如,通过基础持久层),而应将其标记为无效对象.

例如,选择一个具有许多属性的类.如果有任何无效(例如丢失或价值不正确),我想知道哪个是无效的,并将其标记为无效.获取所有未通过验证的字段的名称非常重要,无论是原始字段还是存在验证问题的子实体.

我看过javax.validation,但是我无法弄清ConstraintViolation的作用:发现验证错误时,它由验证器返回,但是AFAIK不显示要收集的字段名称.

问题是:您是否有使用javax.validation的任何实现的示例,这些实现显示对每个经过验证的bean无效的字段名称列表?

另外,我可以引入自定义属性,而不是为要使用自定义逻辑进行验证的每个重复出现的属性添加ValidatedBy属性吗?

解决方法:

如果您想要引起ConstraintViolation的元素的名称,则必须使用

Path path =  ConstraintViolation.getPropertyPath();
// a path is an iterable of Path.Node objects
// the last node element in the path is the element that caused the violation
// You can get it's name via
Path.Node node = ...;
node.getName();

请参阅JSR-303 spec第4.2章,以获取有关路径的详细信息.

标签:validation,bean-validation,java
来源: https://codeday.me/bug/20191030/1969692.html