JSR303 Bean验证,如何知道违反了什么类型约束

时间:2012-10-04 02:37:42

标签: java validation bean-validation hibernate-validator

我正在开发一个插件,我需要将Bean Validator与底层框架集成,它似乎工作得很好,除非在我受到攻击的一点上。

插件将注意为遵守JSR303规范的任何Bean Validator提供桥接(Hibernate-Validator,Apache Bean验证器)

一旦出现一些约束违规错误,我需要知道它是什么样的违规行为是

  1. 提交级别约束
  2. 物业级别
  3. 班级
  4. 并基于此我需要构建错误消息,并需要做一些其他的工作。

    有没有办法找出来自ConstraintViolation<?>的约束违规类型,以便我可以进行后期处理以准备要在UI上显示的内容?

1 个答案:

答案 0 :(得分:1)

  

有没有办法找出违反约束的类型   ConstraintViolation让我可以做后期处理准备   在UI上显示的内容?

不,没有。您可以区分类级别约束和属性约束。但是,无法确定注释是放在字段还是属性的getter上。

确定类和属性约束之间的一种方法是查看 ConstraintViolation#getPropertyPath()。如果 getName()在叶节点上返回null,则您具有类级别约束,否则为属性级别约束。

在Bean Validation 1.1(JSR 349)中,事情变得容易一些,因为 ConstraintViolation#getPropertyPath()返回的 Path 包含每个节点的# getElementDescriptor 。仍无法区分属性的访问方式(字段与getter)。