当我运行项目时,位于 src / main / resources 中的本地化验证消息(当项目未打包并使用嵌入IDE的运行程序运行时)或 WEB-INF /类(打包和部署项目时)未解决。我总是收到默认消息。
然而,当我运行测试时,消息得到了正确解决......
我使用vanilla验证(Spring不会干扰)。
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的位置吗?
答案 0 :(得分:0)
我通过在ResourceBundleMessageInterpolator构造函数中传递PlatformResourceBundleLocator解决了这个问题。我不知道为什么系统无法从WEB-INF /类中获取ValidationMessages(我认为它是自动的),但这可行。
public LocaleAwareMessageInterpolator(Locale defaultLocale) {
super(new PlatformResourceBundleLocator("ValidationMessages"));
this.defaultLocale = defaultLocale;
}
Hibernate doc非常明确。我错过了。