jpa - 获取 Bean Validation 错误并向用户显示相应消息的正确方法
问题描述
我正在一个使用 JPA 和 Bean Validation 的项目中工作。我想向用户显示有关验证失败的友好消息,并且我需要根据用户的语言环境以不同的语言显示这些消息。
我正在使用标准注释,如@NotNull
, @Size
,以及一些自定义类级别的验证。
我正在使用以下代码在持久化实体之前验证它们:
Validator validator = validation.buildDefaultValidatorFactory().getValidator();
Set<ConstraintViolation<Company>> constraintViolations = validator.validate(company);
if (constraintViolations.size() > 0) {
Set<String> violationMessages = new HashSet<String>();
for (ConstraintViolation<Company> constraintViolation : constraintViolations) {
violationMessages.add(constraintViolation.getPropertyPath() + ": " + constraintViolation.getMessage());
}
}
如果验证失败,我可以看到验证失败的消息和字段,但我不知道如何将这些验证消息转换为友好的消息和不同的语言(基于Locale
用户)。
我有以下问题:
- 实现这一目标的正确方法是什么?
- 我知道 JPA 在持久化之前会根据验证自动检查实体。如果我手动执行验证(使用上面的代码),我是否会运行两次验证过程?
- 如果我使用在更新模型之前也执行验证的 JSF,我会运行 3 次验证过程(1. JSF、2. 上述代码和 3. Wildfly/JPA 在持久/合并之前)?
- 如果上面的代码在 EJB 中运行,我如何将验证错误传递给表示层(例如 JSF)?
- 我是否需要将 ConstraintViolations 列表返回到表示层?- 我需要为每个验证创建一个例外吗?
谢谢
解决方案
推荐阅读
- r - R 中的 XGBoost 解释器 - 如何对特征贡献实施约束?
- python-3.x - Pygmo 2:控制内存分配
- angular - 我应该怎么做才能使用 grails 3 和 Angular 创建一个 Web 应用程序?
- java - Spring Boot Index-Page 在 Docker 容器中返回 403
- ios - UICollectionView shouldShowMenuForItemAt 未调用
- android - MPAndroidChart:自定义 Y 轴上的毕业步骤
- visual-studio-code - 有没有办法用 vscode.workspace.createFileSystemWatcher 观察多种文件类型
- google-admin-sdk - 需要查明用户何时被暂停
- google-maps-api-3 - Google Maps API - 自定义某些控件的外观
- amazon-web-services - 如何使用映射模板更新 DynamoDb 中的布尔字段?