尝试在配置中获取可选地图,我尝试过
@Value("#{${my.prefix.mymap} }") Map<String, Integer> mymap
与属性文件中的
my.prefix.mymap={a=3, b=4}
一起使用,如果没有(在属性文件中定义)则失败
到目前为止听起来很不错。
但是
@Value("#{${my.prefix.mymap : { a : 1, b : 2 } } }") Map<String, Integer> mymap
或
@Value("#{${my.prefix.mymap ?: { a : 1, b : 2 } } }") Map<String, Integer> mymap
将 1 和 2 作为值,无论属性文件中定义什么。
我想知道我是否错过了一个神奇的语法,或者我希望太多。
这是一个错误(来自我或框架)还是只是令人沮丧地缺乏功能?
Spring 是 6.0.11
[编辑1]
收到第一条评论后尝试过:
@Value("#{${my.prefix.mymap} ?: { a : 1, b : 2 } }") Map<String, Integer> mymap
但是得到了Could not resolve placeholder
。
也尝试过,然后:
@Value("#{${my.prefix.mymap:null} ?: { a : 1, b : 2 } }")
但是在属性文件中定义时遇到了同样的问题:我得到了默认值。
[编辑2]
尝试过
@Value("${my.prefix.mymap : #{ {a:1, b:2} } }")
No converter found capable of converting from type [java.util.Collections$UnmodifiableMap<?, ?>] to type [java.lang.String]
my.prefix.mymap={a:2,b:3}
位于属性文件中时
您的
@Value
定义中有错误语法。您在 }
值字符串末尾添加了超出所需的 @Value
。这应该可以解决您的问题:
@Value("#{${my.prefix.mymap}?: {a:1,b:2} }")
Map<String, Integer> mymap;
已更新
如果属性文件中不存在
my.prefix.mymap
,您可以通过以下方式使用此 mymap
类型来设置 Optional
字段:
@Value("${my.prefix.mymap:#{{a:1,b:2}}}")
private Optional<Map<String, Integer>> mymap;
这个的用途:
if (mymap.isPresent()) {
// log.info(mymap.get().toString());
}
这在
application.properties
文件中:
my.prefix.mymap=#{{a:2,b:3}}