java - 调用 MessageSource#getMessage 时如何修复“NoSuchMessageException”
问题描述
我想读取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;
}
}
我究竟做错了什么?
解决方案
尝试这样的事情:
@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
.
推荐阅读
- azure - 无法在 Microsoft Azure 中执行连接测试
- javascript - lit-html:如何返回
- c++ - Accessing only one executable at a time to a function in .so library
- excel - 有没有办法计算一个变量在excel中出现(和没有)另一个变量的时间?
- python - Python:如何从格式为 excel 的“完整日期”的文本中解析日期?
- sql-server - 作为所有者和唯一用户,如何修复 Azure SQL Server 中的数据库权限?
- selenium - Selenium webdriver 在使用 X11 会话后填充整个磁盘空间
- c - 在C中将空终止字符串转换为非空终止字符串
- json - 在 Vue/JSON 中传递变量
- docker - 在 Docker 容器内 ping 时权限被拒绝错误