我有一个像这样定义的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。
你可以使用这个:
@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 ;
该错误消息与您的代码无关。在
MapKeysFilter
中,Spring 表达式是 ${system.status.json.filter:}
,而异常则抱怨 ${system.status.json.filter}
。注意缺少冒号 :
字符,很可能该异常是从其他地方抛出的。
使用 SpringEL 注入
null
的正确语法是:
@Value("${system.status.json.filter:#{null}}")
使用 Spring Boot 3,以下语法对我有用
@Value("${system.status.json.filter:#{new String[0]}}")