Spring @Value注解无法解析字符串与URL映射的Map问题求助
问题解决:Spring @Value注入Map时的SpEL语法错误
你的问题出在配置文件格式不符合Spring EL(SpEL)对Map的解析规则,导致启动时EL表达式解析失败。
错误原因
你当前的配置:
report.type.urls=SOME_TYPE:'file:\//home/SOME_TYPE'
SpEL解析时会先把${report.type.urls}替换成该字符串,再尝试解析为Map,但这个写法缺少Map必需的大括号包裹,键值对的语法也不符合SpEL要求,因此触发"解析有效表达式后仍存在多余冒号数据"的错误。
正确配置写法
需要将配置值用大括号包裹,键值对遵循key: 'value'的格式:
report.type.urls={SOME_TYPE: 'file://home/SOME_TYPE'}
如果键包含特殊字符(比如空格、非标识符字符),可以给键加上单引号:
report.type.urls={'SOME_TYPE': 'file://home/SOME_TYPE'}
另外注意:properties文件中file://不需要转义,直接写即可,原来的file:\//属于多余转义,会导致最终URL出现冗余斜杠。
代码验证
你的Java代码写法是正确的:
@Value("#{${report.type.urls}}") private Map<String, String> reportTypeToUploadHost;
#{...}是SpEL表达式标识,${report.type.urls}会先读取配置值,再由SpEL解析为Map对象。
内容的提问来源于stack exchange,提问作者luka_kalandadze
相关产品推荐
相关产品推荐

