调用MessageSource#getMessage时如何修复'NoSuchMessageException'

时间:2019-06-19 19:30:08

标签: java spring-boot

我想读取messages.properties-File中的属性。但是当我打电话

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

我收到了NoSuchMessageException。

我已经尝试将我的messages.properties-File重命名为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;
    }

}

我在做什么错了?

1 个答案:

答案 0 :(得分:0)

尝试这样的事情:

@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