Spring @Value with arraylist split和default empty list

时间:2018-03-19 15:43:35

标签: java spring spring-mvc spring-boot

我正在努力获得标题中要求的两种行为。 1)我有一个这样的属性文件:

my.list=a,b,c

2)如果该属性不存在,我想要一个空列表

为什么以下是我的语法错误?

@Value("#{'${my.list}'.split(',') : T(java.util.Collections).emptyList()}")

4 个答案:

答案 0 :(得分:3)

是否遇到了类似的要求。以下是执行此操作的一种可能方法:

@Value("#{'${some.key:}'.split(',')}")
Set<String> someKeySet;

我认为类似的方法也应适用于List。
属性名称后请注意“:”。默认为空字符串,这将给出空列表或空值。

答案 1 :(得分:1)

我认为你不能使用嵌套的SPEL。实现这一目标的一种方法是

@Value("${server.name:#{null}}")
private String someString;

private List<String> someList;

@PostConstruct
public void setList() {
  someList = someString == null ? Collections.emptyList() : Arrays.asList(someString.split(","));
}

答案 2 :(得分:0)

有一种方法可以让它发挥作用:

@Value("#{T(java.util.Arrays).asList('${my.list:}')}") 
private List<String> list;

my.list:的双点之后,您可以设置默认值。现在它是emtpy。

答案 3 :(得分:0)

实现这一目标的最佳方法是

@Value("#{'${my.list:}'.split(',')}")
private List<String> myList;

如果key没有出现在application.properties中,则我们将使用一个空列表进行初始化。