web-dev-qa-db-ja.com

Spring Boot ymlResourceBundleファイル

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.
11
Radouane ROUFID

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;
    }
}
5
Michael Hibay

私が見つけた最良の解決策は、@ vtoshによって私の前に見つかりました:使用する このライブラリ 。唯一の問題は(それでも)それが十分に人気がないということです。

他のオプションは、Javaローカリゼーションサポートを手動でResourceBundle.Controlクラスを拡張することです(公式の例を見つけることができます ここ )です。しかし、私はしません@vtoshが見つけたライブラリはこのアプローチを使用しているため、多くの意味があります。

なぜ春の解決策がないのですか?さて、あなたが見つけることができる答え このjira 。それはまだオープン状態なので、少なくとも今のところ、彼らの側からの解決策になるとは思っていません。

4