如何对多个资源包使用 Java Hibernate 验证?
How to use Java Hibernate validation with multiple Resource bundles?
我有一个包含依赖项的 Java 应用程序。依赖项是一个 Java 库,它提供:
- 一个
javax.validation.Validator
- 一组可用于验证的注释及其关联的
javax.validation.ConstraintValidator
s
- 在属性文件中有自己的一组验证错误消息
- 一些需要验证的领域模型POJO
该应用程序使用图书馆的验证器来验证图书馆的 POJO。到目前为止,一切都很好。但是该应用程序还组成了一个新的 POJO,它将图书馆的 POJO 作为字段(嵌套的 POJO)。由库的 POJO 组成的应用程序的 POJO 需要验证,因此该应用程序在属性文件中也有自己的验证消息。 (在验证一个 Java 对象时,我们可能需要来自应用程序的库 和 的验证消息)。
private static final ValidatorFactory FACTORY = Validation.byDefaultProvider()
.configure()
.messageInterpolator(new ResourceBundleMessageInterpolator(
new PlatformResourceBundleLocator("MyLibraryValidationMessages")))
.buildValidatorFactory();
如何验证单个 POJO(其中嵌套了 POJO),其中包含引用来自两个不同资源包的消息的注释(及其关联的 ConstraintValidators
)?需要:Validator
从两个不同的资源包获取消息。 我不 使用 Spring。
我们可能根本不需要使用属性文件中的资源包,因为我们不需要为不同的区域设置单独的消息翻译。对于每个错误,我们只需要一条默认消息。如果我们可以将所有消息存储在代码中,是否可以提供解决方法?
一种我尚未尝试但我认为可行的解决方法是确保库和应用程序中的资源包名称完全相同,并且 duplicate/copy 来自sdk 到应用程序的资源包中,因为如果它们使用相同的名称,应用程序的包将隐藏库的包。但这是次优的,因为错误消息重复。
我控制依赖项和应用程序的代码。
我刚找到 AggregateResourceBundleLocator
应该做的工作:
private static final ValidatorFactory FACTORY = Validation.byDefaultProvider()
.configure()
.messageInterpolator(new ResourceBundleMessageInterpolator(
new AggregateResourceBundleLocator(
Arrays.asList("MyLibraryValidationMessages", "MyAppValidationMessages"))))
.buildValidatorFactory();
我有一个包含依赖项的 Java 应用程序。依赖项是一个 Java 库,它提供:
- 一个
javax.validation.Validator
- 一组可用于验证的注释及其关联的
javax.validation.ConstraintValidator
s - 在属性文件中有自己的一组验证错误消息
- 一些需要验证的领域模型POJO
该应用程序使用图书馆的验证器来验证图书馆的 POJO。到目前为止,一切都很好。但是该应用程序还组成了一个新的 POJO,它将图书馆的 POJO 作为字段(嵌套的 POJO)。由库的 POJO 组成的应用程序的 POJO 需要验证,因此该应用程序在属性文件中也有自己的验证消息。 (在验证一个 Java 对象时,我们可能需要来自应用程序的库 和 的验证消息)。
private static final ValidatorFactory FACTORY = Validation.byDefaultProvider()
.configure()
.messageInterpolator(new ResourceBundleMessageInterpolator(
new PlatformResourceBundleLocator("MyLibraryValidationMessages")))
.buildValidatorFactory();
如何验证单个 POJO(其中嵌套了 POJO),其中包含引用来自两个不同资源包的消息的注释(及其关联的 ConstraintValidators
)?需要:Validator
从两个不同的资源包获取消息。 我不 使用 Spring。
我们可能根本不需要使用属性文件中的资源包,因为我们不需要为不同的区域设置单独的消息翻译。对于每个错误,我们只需要一条默认消息。如果我们可以将所有消息存储在代码中,是否可以提供解决方法?
一种我尚未尝试但我认为可行的解决方法是确保库和应用程序中的资源包名称完全相同,并且 duplicate/copy 来自sdk 到应用程序的资源包中,因为如果它们使用相同的名称,应用程序的包将隐藏库的包。但这是次优的,因为错误消息重复。
我控制依赖项和应用程序的代码。
我刚找到 AggregateResourceBundleLocator
应该做的工作:
private static final ValidatorFactory FACTORY = Validation.byDefaultProvider()
.configure()
.messageInterpolator(new ResourceBundleMessageInterpolator(
new AggregateResourceBundleLocator(
Arrays.asList("MyLibraryValidationMessages", "MyAppValidationMessages"))))
.buildValidatorFactory();