从应用程序yml将列表类型属性加载到Java POJO中

时间:2019-02-22 09:55:18

标签: java spring spring-boot yaml

我想将嵌套的List属性加载到Java POJO中

我正在使用ConfigurationProperties注解从yml上的类A加载属性。我的列表的类型为B。此B对象具有自己的LIST属性。但是yml属性未按预期加载。

@ConfigurationProperties(prefix="prop")
public class A{
List<B> b = new ArrayList<>(); 

//getters and setters ......
}

public class B{
String user; //This property gets loaded.
List<String> list = new ArrayList<>(); //However this list is still empty

//getters and setters ......
}

我在application.yml中的财产如下所示。

prop:
  -
  user: alpha
  list: a,b,c
  -
  user: beta
  list: x,y,z

2 个答案:

答案 0 :(得分:1)

这不是列表的YAML语法:

list: a,b,c

那只是一个字符串a,b,c

如果您希望使用逗号分隔列表,则可以在加载后对其进行解析。 Spring使用自己的某些属性执行类似的操作,例如在此示例中使用RabbitMQ属性。 addresses以逗号分隔,函数parseAddresses()在加载后拆分字符串,作为该成员的setter方法的一部分。

https://github.com/spring-projects/spring-boot/blob/v2.1.3.RELEASE/spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/amqp/RabbitProperties.java

否则,请使用YAML列表语法。

prop:
  - user: alpha
    list: 
      - a
      - b
      - c
  - user: beta
    list:
      - x
      - y
      - z

答案 1 :(得分:0)

根据manual,您将列表项定义为:

list: 
      - a
      - b
      - c