Как исправить «NoSuchMessageException» при вызове MessageSource#getMessage

Я хочу прочитать свойство в файле messages.properties. Но когда я звоню

messageSource.getMessage("property", null, Locale.getDefault())

Я получаю исключение NoSuchMessageException.

Я уже пытался переименовать свой файл messages.properties в messages_de_DE.properties и использовать Locale.GERMANY, но разницы нет.

Файл находится в src/main/resources

Это мой стартовый класс:

@SpringBootApplication
public class Start extends SpringBootServletInitializer {

    public static void main(final String[] args) {
        SpringApplication.run(Start.class, args);
    }

    @Bean
    public MessageSource messageSource() {
        final ReloadableResourceBundleMessageSource messageSource = new ReloadableResourceBundleMessageSource();
        messageSource.setBasename("classpath*:messages");
        messageSource.setDefaultEncoding("UTF-8");
        return messageSource;
    }

    @Bean
    public LocalValidatorFactoryBean validator(final MessageSource messageSource) {
        final LocalValidatorFactoryBean bean = new LocalValidatorFactoryBean();
        bean.setValidationMessageSource(messageSource);
        return bean;
    }

}

Что я делаю неправильно?

Вы хотите отобразить его в HTML? если да, при использовании Thymeleaf просто сделайте th:text = "${messageLabel}" или с JSP <spring:message code = "messageLabel"/> и измените свои свойства на формат messages_de.properties

JensW 20.06.2019 10:04
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
1
262
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Попробуйте что-то вроде этого:

@Configuration
public class MessageConfig {

    private final MessageSource source;
    private final MessageSourceAccessor accessor;


    @Autowired
    public MessageConfig(MessageSource messageSource) {
        this.accessor = new MessageSourceAccessor(this.source = messageSource, new Locale("de", "DE"));
    }


    @Bean
    public Validator validator() {
        LocalValidatorFactoryBean factory = new LocalValidatorFactoryBean();
        factory.setValidationMessageSource(this.source);
        return factory;
    }

    public String get(String msg) {
        try {
            Assert.hasText(msg, "message code must be not blank");
            return this.accessor.getMessage(msg.trim());
        } catch (NoSuchMessageException e) {
            return '{' + msg + '}';
        }
    }
}

Пожалуйста, используйте существующие MessageSource и поместите файлы свойств в /src/main/resources. Кроме того, попробуйте переименовать файл сообщения как messages_de.properties.

Спасибо, ваш ответ помог мне исправить это. Я удалил свои пользовательские определения Bean, и это сработало.

Razilein 20.06.2019 18:50

Другие вопросы по теме