Spring @Value 与 arraylist 拆分和默认空列表

Pha*_*ate 5 java spring spring-mvc spring-boot

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

my.list=a,b,c
Run Code Online (Sandbox Code Playgroud)

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

为什么以下内容会引发我的语法错误?

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

Pat*_*ick 6

有一种方法可以让它工作:

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

my.list:您可以在冒号后设置默认值。现在它是空的。


pvp*_*ran 3

我不认为你可以使用嵌套 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(","));
}
Run Code Online (Sandbox Code Playgroud)