我想从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"));
}
}
答案 0 :(得分:0)
上述方法有几个错误,需要对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
批注中提到了类,那么所有这些类都需要用@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;
}
}