我正在使用自定义验证消息通过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,所以即使我的其余代码看起来还可以,这也是不可能的。
答案 0 :(得分:0)
好吧,我找到了解决方案。
实际上很简单。我自己对Spring Boot的误解在这里是错的。基本上,在我的测试课中,我需要添加注释@ConfigurationContext (classes = Application.java, MyCustomValidationConfig.java)
,它可以正常工作!感谢所有看过的人。现在我只需要找出测试@valid即可!