如何使用JSR 303(Bean验证)?

MyT*_*tle 6 java hibernate-validator bean-validation

我阅读了很多关于JSR 303规范的教程,但是我没有看到任何准备好生产的例子.到处都描述了如何获得Set<Constraintviolation<T>>对象.

例:

ValidatorFactory factory = Validation.buildDefaultValidatorFactory();
validator = factory.getValidator();
Set<ConstraintViolation<Car>> violations = validator.validate(car);
Run Code Online (Sandbox Code Playgroud)

但接下来呢?我想通知方法调用者(客户端)方法参数处于不一致状态.

我必须做Set<ConstraintViolation<Car>>什么?我需要手动迭代 Set<ConstraintViolation>,将所有错误消息收集到一个字符串中,然后使用此消息抛出异常?

或者存在一些开箱即用的方便方式?

或者最好validate在每个bean中提供方法?

Spa*_*ker 2

我会同意你的第一个建议 - 迭代约束违规。您不必创建包含所有这些内容的错误消息。仅显示一条错误消息bean <bean> is not valid并将约束违规设置为异常的属性可能是一个好主意。

也许您需要将约束违规转换为另一个对象,因为否则您的应用程序的大部分内容都会依赖于 bean 验证 api。这可能是一个太强的耦合。

您的问题是,如何处理违反约束的情况是非常具体的用例。在很多情况下,您不想通知调用者有关约束违规的信息,而是通知其他对象。例如,在 Web 表单中,您希望通知视图模型它还应该显示这些约束违规情况。抛出异常是另一回事。请注意,这在大多数情况下都不是ConstraintViolationException,而是特定于应用程序的例外。