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

Apache Velocity变量名后点字符的转义问题求助

Apache Velocity变量后点字符的正确转义方法

你的问题根源在于:Velocity会把$class_name.MIN_VALUE中的.MIN_VALUE解析为class_name变量的属性,但你传入的class_name是字符串类型,不存在MIN_VALUE属性,因此模板会原样输出。

以下是两种可行的解决方法:

方法一:用${}明确变量边界(推荐,兼容所有版本)

直接将模板中的$class_name改为${class_name},以此明确变量的范围,避免Velocity把后面的点当成属性访问符:

## function.vm
void functionA() {
    int minimum_value = ${class_name}.MIN_VALUE;
    int maximum_value = ${class_name}.MAX_VALUE;
}

替换后输出结果:

void functionA() {
    int minimum_value = Short.MIN_VALUE;
    int maximum_value = Short.MAX_VALUE;
}

方法二:针对Velocity 2.x使用反斜杠转义

如果你使用的是Velocity 2.x版本,可以直接用反斜杠转义点字符,且转义后的反斜杠不会被输出:

## function.vm
void functionA() {
    int minimum_value = $class_name\.MIN_VALUE;
    int maximum_value = $class_name\.MAX_VALUE;
}

但这种方法在Velocity 1.x中会保留反斜杠,因此兼容性不如第一种方法。

另外你提到的$esc.java()工具,作用是转义Java特殊字符(如引号、换行符等),并不适用于解决变量边界的解析问题,所以无效是正常的。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 19:50:25