You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Kotlin中使用Spring @ConditionalOnExpression遇编译错误求助

解决Kotlin中@ConditionalOnExpression的编译错误问题

问题根源

你碰到的这个编译错误,核心原因是Kotlin的字符串模板语法和Spring的占位符语法撞车了。在Kotlin里,双引号包裹的字符串里的${}会被编译器认定为Kotlin自己的字符串模板表达式,它会尝试在代码里找xxx.enabled、yyy.enabled这些变量——但这些其实是你yml配置里的占位符,根本不是Kotlin代码中的编译时常量,所以编译器直接报错了。

解决办法

有两种简单可行的方案:

1. 转义美元符号

给Spring占位符里的$加上反斜杠\,让Kotlin把${}当成普通文本,不进行解析:

@ConditionalOnExpression("\${xxx.enabled:true} or \${yyy.enabled:true}")

2. 使用Kotlin原生字符串

用三重双引号"""把整个表达式包起来,Kotlin的原生字符串不会解析内部的${}模板语法,会原封不动把内容传给Spring处理:

@ConditionalOnExpression("""${xxx.enabled:true} or ${yyy.enabled:true}""")

两种方法都能让Kotlin编译器停止对这些占位符的无效解析,把表达式交给Spring的表达式解析器去读取yml里的配置,问题就能解决。

内容的提问来源于stack exchange,提问作者dunfa

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.18 03:40:35