1

Java spring-boot アプリケーションの src/main/resources に次の application-errors.yml ファイルが定義されています。

client:
 badrequest: {code: 001, message: 'Malformed request', status: 400}
 configuration: {code: 002, message: 'Invalid EC2 VPC configuration', status: 400}

server: 
 unexpected.error: 
  code: 004
  message: 'Unexpected error occurred.  Please try again'
  status: 500

プロパティを指定するために 2 つの異なる形式を試したことに注意してください。

@Configuration アノテーションが付けられたクラスから、次の Bean を介してそのプロパティ ファイルをロードします。

    @Bean
    public static YamlPropertiesFactoryBean getYamlProperties() {
        YamlPropertiesFactoryBean yaml = new YamlPropertiesFactoryBean();
         yaml.setResources(new ClassPathResource("application-errors.yml"));
         return yaml;
    }

プロパティが Spring Environment 変数を介してロードされていることがわかりますが、期待したパターンではありません。デバッグを行うと、読み込まれたプロパティ ファイルのソースに次の値が含まれていることがわかります。

{client.badrequest=code:001 message:'Malformed request' status:400, client.configuration=code:002 message:'Invalid EC2 VPC configuration' status:400, server.unexpected.error=code:004 message:'Unexpected error occurred.  Please try again' status:500}

yaml ファイルが部分的にフラット化されたようです (深さが 2 レベルのみ)。代わりに、各 end プロパティが独自にフラット化されることを期待していました。私が期待していたフォーマットは次のようなものでした:

{client.badrequest.code=001, client.badrequest.message='Malformed request', client.badrequest.status=400, client.configuration.code=002, client.configuration.message='Invalid EC2 VPC configuration', client.configuration.status=400, server.unexpected.error.code=004, server.unexpected.error.message='Unexpected error occurred.  Please try again', server.unexpected.error.status=500}

Spring がプロパティを完全に平坦化するには、何を変更する必要がありますか? yaml フォーマット パターン、または Spring が yaml ファイルを正しくフラット化するために従うパターンのいずれかを理解していない場合は、私の理解を修正してください。

4

1 に答える 1

1

今朝この質問にたどり着いたときに、私が犯した複数のエラーを見つけました。

1) 私のコードは、カスタムの名前付き yml プロパティ ファイルを実際にはロードしていませんでした。代わりに、私のプロジェクトにもあるデフォルトの application.yml ファイルを取得していました。

2) そのデフォルトの application.yml ファイルには、間違った構文の yml 形式のコードが含まれていました。具体的には、各プロパティ識別子の後に必要なスペースを省略しました。

client:
 badrequest:
  code:001
  message:'Malformed request' 
  status:400
 configuration
  code:002
  message:'Invalid EC2 VPC configuration'
  status:400

server: 
 unexpected.error
  code:004
  message:'Unexpected error occurred.  Please try again'
  status:500

これら 2 つの問題を理解した後、application.yml からプロパティを正しく読み込むことができました。

プロパティの最終的な構文は次のとおりです。

# Error Properties

client:
 badrequest: {code: 001, message: 'Malformed request', status: 400}
 configuration: {code: 002, message: 'Invalid EC2 VPC configuration', status: 400}

server: 
 unexpected.error: {code: 004, message: 'Unexpected error occurred.  Please try again', status: 500}
于 2015-11-05T00:37:55.720 に答える