Java 如何在SpringBoot2.3中检索yaml配置文件的一部分?

Java 如何在SpringBoot2.3中检索yaml配置文件的一部分?,java,spring,spring-boot,yaml,Java,Spring,Spring Boot,Yaml,我有一个外部应用程序.yaml配置文件,其属性我事先不知道。例如: prop0: prop1: 1234 prop2: prop3: "Hello" prop4: [foo, bar, foo, bar, foo, bar] prop5: - val1 - val2 - val3 prop6: prop7: 123 prop8: 321 我的任务是以yaml格式从prop0检索所有内容: pro

我有一个外部
应用程序.yaml
配置文件,其属性我事先不知道。例如:

prop0:
  prop1: 1234
  prop2:
    prop3: "Hello"
    prop4: [foo, bar, foo, bar, foo, bar]
    prop5: 
      - val1
      - val2
      - val3

prop6:
  prop7: 123
  prop8: 321
我的任务是以yaml格式从
prop0
检索所有内容:

prop1: 1234
prop2:
  prop3: "Hello"
  prop4: [foo, bar, foo, bar, foo, bar]
  prop5: 
    - val1
    - val2
    - val3
我需要将其检索为字符串、InputStream或Map对象,其中每个值表示基元类型、Map或数组。或列表,即

Map<String, Object> prop0Value = ...;
String prop3Value = prop0Value.get("prop2").get("prop3");
List<String> prop5Value = prop0Value.get("prop2").get("prop5");
但该格式不是正确的yaml格式,大多数工具无法解析该格式

更新: 我正在考虑使用
@ConfigurationProperties
注释来解析属性。比如:

@Configuration
@ConfigurationProperties(prefix = "prop0")
public class MyConfigProperties {

    private Map<String, String> prop2;

    public Map<String, String> getProp2() {
        return prop2;
    }

    public void setProp2(Map<String, String> prop2) {
        this.prop2 = prop2;
    }
}
@配置
@配置属性(前缀=“prop0”)
公共类MyConfigProperty{
私人地图2;
公共地图getProp2(){
返回prop2;
}
公共无效集合prop2(地图prop2){
this.prop2=prop2;
}
}
但它有两个缺点:

  • 它返回
    prop2
    下的属性,但我需要
    prop0
    下的所有属性。正如我所说,我不知道将提前使用的财产名称
  • 它仍然使用Spring格式来解析需要
    yaml
    格式的第三方库无法接受的列表

  • 请发布您的configurationproperties classI没有configurationproperties。配置属性类不允许检索所有第二级属性。只有三级属性。ConfigurationProperties需要前缀,用于选择所选前缀的第二级属性,但要映射它们,您需要知道它们的名称(我事先不知道)。也就是说,可以使用
    map prop2映射三级属性
    但我知道它使用Spring yaml格式(与我描述的不同),它只映射
    prop2
    下的属性,而不是
    prop0
    属性。我已经更新了我的问题,将
    ConfigurationProperties
    类包括在内
    @Configuration
    @ConfigurationProperties(prefix = "prop0")
    public class MyConfigProperties {
    
        private Map<String, String> prop2;
    
        public Map<String, String> getProp2() {
            return prop2;
        }
    
        public void setProp2(Map<String, String> prop2) {
            this.prop2 = prop2;
        }
    }