Spring Boot yml ResourceBundle 文件
Posted
技术标签:
【中文标题】Spring Boot yml ResourceBundle 文件【英文标题】:Spring boot yml ResourceBundle file 【发布时间】:2017-09-25 03:17:52 【问题描述】:我正在使用 Spring 的 MessageSource
从类路径中的 .properties
文件中加载错误消息。我的属性尊重某个“模板”,例如Object.field.unrespectedConstraint
示例:
userRegistrationDto.password.Size= Le mot de passe doit avoir au minimum 6 caractères.
userRegistrationDto.email.ValidEmail= Merci de saisir une addresse mail valide.
在重构的情况下(例如更改类的名称),我必须在几个地方更改我的属性文件。
有没有办法使用 yaml 文件(messages.yml)作为 ResourceBundle 来获得类似的东西:
userRegistrationDto:
password:
Size: Le mot de passe doit avoir au minimum 6 caractères.
email:
ValidEmail: Merci de saisir une addresse mail valide.
【问题讨论】:
嗯,就是这样(免责声明:我自己没有测试过):github.com/akihyro/yaml-resource-bundle 【参考方案1】:我认为这应该足以满足您的要求,如果您需要在 VM 操作期间重新加载 MessageSource,您可能需要进行更多挖掘。
@Configuration
public class TestConfig
@Bean(name = "testProperties")
public Properties yamlProperties() throws IOException
YamlPropertiesFactoryBean bean = new YamlPropertiesFactoryBean();
bean.setResources(new ClassPathResource("test.yml"));
return bean.getObject();
@Bean
public MessageSource messageSource() throws IOException
ResourceBundleMessageSource messageSource = new ResourceBundleMessageSource();
messageSource.setCommonMessages(yamlProperties());
return messageSource;
【讨论】:
【参考方案2】:@vtosh 在我之前找到了我设法找到的最佳解决方案:使用this library。唯一的问题(但仍然)是它不够受欢迎。
另一种选择是扩展 Java 本地化支持,手动扩展 ResourceBundle.Control
类(您可以找到官方示例 here)。但我认为它没有多大意义,因为@vtosh 找到的库使用了这种方法。
为什么Spring没有解决方案?好吧,您可以在this jira 中找到答案。它仍处于 Open 状态,所以我不希望至少在他们方面有任何解决方案。
【讨论】:
以上是关于Spring Boot yml ResourceBundle 文件的主要内容,如果未能解决你的问题,请参考以下文章
使用 Spring-Boot 2.1 从 .yml 读取对象列表 [重复]