我有一个这样定义的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。
答案 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)
感谢大家的支持! 原来,我在运行该应用程序时不正确,清理并重新构建就可以了