[英]Springboot @ConfigurationProperties nested yaml properties don't load
[英]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.