如何修复“ messageSourceBean的parentMessageSource”,使其不总是为空

时间:2019-02-08 15:28:11

标签: java validation spring-boot intellij-idea

我正在使用自定义验证消息通过Spring Boot创建一个API,并且始终得到 org.springframework.context.NoSuchMessageException:在代码“ name.of.my.message”下找不到区域设置为“ en_US”的消息异常,当我尝试从 messages.properties 文件获取消息时。

起初我以为是因为语言环境,所以我尝试使用自己的 LocaleResolver @Bean 将默认语言环境设置为US,并将messages.properties文件名更改为messages_en_us.properties,但这并不能解决问题。

我最终认为这可能是由于 messageSource对象而引起的,我认为我是对的。调试时,我发现 messageSource对象 parentMessageSource 为空,当我进入 getMessage()方法时,我发现如果 parentMessageSource 为null,它将引发 NoSuchMessageException 。关于这个具体问题,我找不到很多东西,这就是为什么我在这里问这个问题。

这是我在application.java中的代码(直到我使它起作用):

@Bean
public MessageSource messageSource() {

    ResourceBundleMessageSource messageSource = new 
        ResourceBundleMessageSource ();

    messageSource.setBasename("classpath:messages");
    messageSource.setDefaultEncoding("UTF-8");
    return messageSource;
}   

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

messages.properties:

user.firstName.NotNull=First name must not be null.

在我阅读的所有教程中,这只是获取验证消息所需要的,但是由于parentMessageSource为null,所以即使我的其余代码看起来还可以,这也是不可能的。

1 个答案:

答案 0 :(得分:0)

好吧,我找到了解决方案。

实际上很简单。我自己对Spring Boot的误解在这里是错的。基本上,在我的测试课中,我需要添加注释@ConfigurationContext (classes = Application.java, MyCustomValidationConfig.java),它可以正常工作!感谢所有看过的人。现在我只需要找出测试@valid即可!