Spring @Value 默认为空列表

Spring @Value empty list as default

有没有办法将空列表设置为 Spring 中 属性 的默认值,例如:

@Value("${my.list.of.strings :" + new ArrayList<>() + "}")
private List<String> myList;

显然不是新的 ArrayList,但我需要一个空列表。

您可以使用 Collections.emptyList() 填充零大小的空列表对象,如下所示:

@Value("#{T(java.util.Collections).emptyList()}")
private List<String> myList;

这会给你一个零大小的 myList

在查看了 SpEL 规范并结合@javaguy 的回答后,我想到了这个:

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

对我有用,使用 Spring 5.0.x(如果您的 my.list.of.strings 属性 未在上下文中配置,则给出空列表)

之后你可以轻松地做一些像

CollectionUtils.isNotEmpty(myList)

实际上,在当前的 Spring 版本中,只有一个符号 : 具有 empty default 值。

我正在使用的完整示例:

@Value("${my.custom.prop.array:}")
private List<Integer> myList;

为了保险起见和安全起见,我还将 init 添加到 List 变量中:

@Value("${my.custom.prop.array:}")
private List<Integer> myList = new ArrayList<>();