Не удается разрешить validationmessages.properties

#java #bean-validation #hibernate-validator

#java #компонент-проверка #спящий режим-валидатор

Вопрос:

Когда я запускаю свой проект, локализованные сообщения проверки, расположенные в src /main/resources (когда проект не упакован и запускается с помощью встроенного в IDE runner) или WEB-INF / classes (когда проект упакован и развернут), не разрешаются. Я всегда получаю сообщения по умолчанию.

Тем не менее, когда я запускаю тесты, сообщения разрешаются правильно…

Я использую проверку ванили (весна не мешает).

 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?

Комментарии:

1. Каково точное имя и расположение файла свойств? Это должно быть ValidationMessages.properties в корне пути к классу. src/main/resources — это не то место, откуда он берется. Это исходное местоположение, сборка (независимо от используемого вами инструмента или IDE) копирует файл в другое местоположение. Это также может помочь просмотреть ваш код для LocaleAwareMessageInterpolator .

2. Спасибо. Имя ValidationMessages.properties . Путь развертывания — WEB-INF/classes . Я опубликую код.

Ответ №1:

Я решил проблему, передав PlatformResourceBundleLocator в конструктор ResourceBundleMessageInterpolator . Я не знаю, почему система не может получить ValidationMessages из WEB-INF / classes (я думал, что это автоматически), но это работает.

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

В документе Hibernate об этом довольно ясно. Я пропустил это.