Spring:数组属性的默认值

问题描述 投票:0回答:3

我有一个像这样定义的bean:

@Component
class MapKeysFilter {

    @Value("${system.status.json.filter:}")
    private String[] filters;

当我启动应用程序时,我希望“filters”字段为空数组,以防“system.status.json.filter”属性未设置。但是我遇到了一个例外:

Caused by: java.lang.IllegalArgumentException: Could not resolve placeholder 'system.status.json.filter' in value "${system.status.json.filter}"

有人可以解释一下为什么它会这样工作吗?

注意我以类似的方式将另一个属性注入到标有

@Configuration
的类中,并且它工作得很好。我正在使用 Spring 5.0.7。

java spring
3个回答
3
投票

你可以使用这个:

@Value("${system.status.json.filter:}")
private String[] filters = new String[0];

使用

List
代替
Array
将使您能够执行以下操作:

@Value("${system.status.json.filter:}#{T(java.util.Collections).emptyList()}")
private List<String> filters;

如果您想指定默认的非空值,请添加它们并用逗号分隔。

例如:

@Value("${system.status.json.filter:oneFilter,anotherOne}")
private String[] filters ;

2
投票

该错误消息与您的代码无关。在

MapKeysFilter
中,Spring 表达式是
${system.status.json.filter:}
,而异常则抱怨
${system.status.json.filter}
。注意缺少冒号
:
字符,很可能该异常是从其他地方抛出的。

使用 SpringEL 注入

null
的正确语法是:

@Value("${system.status.json.filter:#{null}}")

0
投票

使用 Spring Boot 3,以下语法对我有用

@Value("${system.status.json.filter:#{new String[0]}}")

© www.soinside.com 2019 - 2024. All rights reserved.