Java 无法解析validationmessages.properties
当我运行我的项目时,当项目未打包时位于src/main/resources中的本地化验证消息,以及当项目打包和部署时与IDE嵌入式运行程序或WEB-INF/类一起运行的本地化验证消息都不会被解析。我总是收到默认消息 然而,当我运行测试时,消息被正确解析 我使用香草验证弹簧不会干扰Java 无法解析validationmessages.properties,java,bean-validation,hibernate-validator,Java,Bean Validation,Hibernate Validator,当我运行我的项目时,当项目未打包时位于src/main/resources中的本地化验证消息,以及当项目打包和部署时与IDE嵌入式运行程序或WEB-INF/类一起运行的本地化验证消息都不会被解析。我总是收到默认消息 然而,当我运行测试时,消息被正确解析 我使用香草验证弹簧不会干扰 validator = Validation.byDefaultProvider().configure().messageInterpolator(new LocaleAwareMessageInterpolator
validator = Validation.byDefaultProvider().configure().messageInterpolator(new LocaleAwareMessageInterpolator(locale)).buildValidatorFactory().getValidator();
LocaleAwareMessageInterpolator扩展了标准ResourceBundleMessageInterpolator
public class LocaleAwareMessageInterpolator extends ResourceBundleMessageInterpolator {
private Locale defaultLocale = Locale.FRENCH;
public LocaleAwareMessageInterpolator(Locale defaultLocale) {
this.defaultLocale = defaultLocale;
}
@Override
public String interpolate(final String messageTemplate, final Context context) {
return interpolate(messageTemplate, context, defaultLocale);
}
@Override
public String interpolate(final String messageTemplate, final Context context, final Locale locale) {
try {
return super.interpolate(messageTemplate, context, locale);
} catch (ExceptionInInitializerError e) {...}
}
}
我应该把它们移到另一个地方吗?
我是否应该在某个地方设置一些参数以给出.properties的位置?我通过在ResourceBundleMessageInterpolator构造函数中传递一个PlatformResourceBundleLocator解决了这个问题。我不知道为什么系统不能从WEB-INF/类中获取验证消息,我认为这是自动的,但这是可行的
public LocaleAwareMessageInterpolator(Locale defaultLocale) {
super(new PlatformResourceBundleLocator("ValidationMessages"));
this.defaultLocale = defaultLocale;
}
他对此非常清楚。我错过了。属性文件的确切名称和位置是什么?它应该是类路径根中的ValidationMessages.properties。然而,src/main/resources并不是一个可以从中获取信息的地方。这是一个源位置,您使用的构建工具或IDE会将文件复制到另一个位置。查看LocaleAwareMessageInterpolator的代码也可能会有所帮助。谢谢。名称为ValidationMessages.properties。部署路径是WEB-INF/classes。我会把密码寄出去。