Простая проблема: я работаю над веб-сайтом Spring Boot с 3 языковыми версиями, я интернационализировал сообщения, используя messages_xx.properties, где xx - языковой префикс, и следующий код:
@Bean
public LocaleResolver localeResolver() {
SessionLocaleResolver slr = new SessionLocaleResolver();
slr.setDefaultLocale(Locale.US);
return slr;
}
@Bean
public LocaleChangeInterceptor localeChangeInterceptor() {
LocaleChangeInterceptor lci = new LocaleChangeInterceptor();
lci.setParamName("lang");
return lci;
}
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(localeChangeInterceptor());
}
Это прекрасно работает. Затем, для простоты, я также создал ValidationMessages_xx.properties для проверки, и он тоже отлично работает. Проблема возникает, когда мне нужно получить программный доступ к какому-либо сообщению из ValidationMessages, например:
if (!userDto.getPassword().equals(userDto.getRepeatPassword())) {
bindingResult.rejectValue("repeatPassword", "error.repeatPassword", "custom.validation.passwordsDontMatch.message");
}
Проблема заключается в третьем параметре rejectValue - мне нужно как-то заменить здесь сообщение из ValidationMessages. Но приведенный выше код возвращает только буквальную строку «custom.validation.passwordsDontMatch.message», хотя редактор идей показывает, что он «видит» правильное сообщение от ValidationMessages здесь, когда я помещаю курсор на строку. Это тоже не работает:
bindingResult.rejectValue("username", "error.username", "${custom.validation.passwordsDontMatch.message}");
Как мне получить доступ к строке custom.validation.passwordsDontMatch.message из класса Java?