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
相关产品推荐
相关产品推荐

