【问题标题】:Spring boot yml ResourceBundle fileSpring Boot yml ResourceBundle 文件
【发布时间】: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.

【问题讨论】:

标签: spring spring-boot properties-file resourcebundle


【解决方案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 状态,所以我不希望至少在他们方面有任何解决方案。

    【讨论】:

      猜你喜欢
      • 2016-08-13
      • 2020-02-14
      • 1970-01-01
      • 1970-01-01
      • 2018-06-28
      • 1970-01-01
      • 2015-05-08
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多