繁体   English   中英

来自Yaml的Springboot @ConfigurationProperties加载列表不起作用

[英]Springboot @ConfigurationProperties load list from yaml not working

我想从yaml文件中加载字符串列表,但测试中该列表为空

当我调试时,我看到列表为空

这是yaml application-reasons-mapping.yml


credit-decision-reasons:
      - reason-code: 'D0001'
        description:  reason 1
      - reason-code: '00002'
        description: reason 2
      - reason-code: '00003'
        description: reason 3
      - reason-code: '00004'
        description: reason 5

配置文件

@Data
@Configuration
@EnableConfigurationProperties(CreditDecisionReasonsMappingProperties.CreditDecisionReasonMappingProperties.class)
@Profile("reasons-mapping")
public class CreditDecisionReasonsMappingProperties {

    private List<CreditDecisionReasonMappingProperties> creditDecisionReasons = new ArrayList<>();

    @Data
    @ConfigurationProperties("credit-decision-reasons")
    public static class CreditDecisionReasonMappingProperties {
        private String reasonCode;
        private String description;
    }

}

测试文件

@RunWith(SpringRunner.class)
@SpringBootTest()
@ActiveProfiles("reasons-mapping")
class CreditDecisionReasonsMappingPropertiesTest {

    @Autowired
    private CreditDecisionReasonsMappingProperties creditDecisionReasonsMappingProperties;

     @Test
     public void testCreditDecisionReasonsMapping_loading_succesfully() {

     System.out.println(creditDecisionReasonsMappingProperties.getCreditDecisionReasons().get(0).getReasonCode());

     assertTrue(creditDecisionReasonsMappingProperties.getCreditDecisionReasons().get(0).getReasonCode().equals("0001"));

     }
}

上面的方法有几个错误,需要对yaml文件和代码进行一些更改

1)yaml文件中的属性缩进错误,它们需要外部类名作为根,这是@ConfigurationProperties批注中的前缀

 credit-decision-reasons-mapping-properties:
   credit-decision-reason-mapping-properties: 
    - reason-code: D0001
      description: reason 1
    - reason-code: 00002
      description: reason 2
    - reason-code: 00003
      description: reason 3
    - reason-code: 00004
      description: reason 5

2)由于您在@EnableConfigurationProperties注释中提到了类, @EnableConfigurationProperties所有这些类都需要使用@ConfigurationProperties进行注释

3) ArrayList应该与yaml文件中的子属性名称匹配

@Data
@Configuration
@EnableConfigurationProperties(CreditDecisionReasonsMappingProperties.
CreditDecisionReasonMappingProperties.class)
@ConfigurationProperties("credit-decision-reasons-mapping-properties")
public class CreditDecisionReasonsMappingProperties {

@Getter
private List<CreditDecisionReasonMappingProperties> creditDecisionReasonMappingProperties;

@Data
@ConfigurationProperties
public static class CreditDecisionReasonMappingProperties {
    private String reasonCode;
    private String description;
     }

 }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM