Spring:数组属性的默认值

时间:2018-07-27 08:29:31

标签: java spring

我有一个这样定义的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。

3 个答案:

答案 0 :(得分:2)

该错误消息与您的代码无关。在MapKeysFilter中,Spring表达式为${system.status.json.filter:},而异常抱怨为${system.status.json.filter}。请注意,缺少冒号:字符,很可能是从其他地方抛出了异常。

使用SpringEL注入null的正确语法是:

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

答案 1 :(得分:1)

您可以使用此:

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

使用List的{​​{1}}代表您可以执行以下操作:

Array

如果要指定默认的非null值,请添加它们并以逗号分隔。

例如:

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

答案 2 :(得分:0)

感谢大家的支持! 原来,我在运行该应用程序时不正确,清理并重新构建就可以了