无法解析validationmessages.properties

时间:2014-06-17 14:09:18

标签: java bean-validation hibernate-validator

当我运行项目时,位于 src / main / resources 中的本地化验证消息(当项目未打包并使用嵌入IDE的运行程序运行时)或 WEB-INF /类(打包和部署项目时)未解决。我总是收到默认消息。

然而,当我运行测试时,消息得到了正确解决......

我使用vanilla验证(Spring不会干扰)。

validator = Validation.byDefaultProvider().configure().messageInterpolator(new LocaleAwareMessageInterpolator(locale)).buildValidatorFactory().getValidator();

LocaleAwareMessageInterpolator扩展了标准的Res​​ourceBundleMessageInterpolator。

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的位置吗?

1 个答案:

答案 0 :(得分:0)

我通过在ResourceBundleMessageInterpolator构造函数中传递PlatformResourceBundleLocator解决了这个问题。我不知道为什么系统无法从WEB-INF /类中获取ValidationMessages(我认为它是自动的),但这可行。

public LocaleAwareMessageInterpolator(Locale defaultLocale) {
   super(new PlatformResourceBundleLocator("ValidationMessages"));
   this.defaultLocale = defaultLocale;
}

Hibernate doc非常明确。我错过了。