我正在努力获得标题中要求的两种行为。 1)我有一个这样的属性文件:
my.list=a,b,c
2)如果该属性不存在,我想要一个空列表
为什么以下是我的语法错误?
@Value("#{'${my.list}'.split(',') : T(java.util.Collections).emptyList()}")
答案 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中,则我们将使用一个空列表进行初始化。