JAVA中Velocity渲染问题

问题现象

在JAVA中使用Velocity模板渲染,宏函数的部分,未被渲染

模板:宏函数ifExistString作用obj对象中存在目标key则拼接指定子串

#set($bizCode=$resp.bizOrderResult)
#set($bizDesc=$resp.bizOrderResult)
#set($oprTime=$methods.getFormatTime("yyyyMMddHHmmss"))
{"IDType":"$req.IDType","IDValue":"$req.IDValue","OprNumb":"$req.OprNumb","BizOrderResult":"$bizCode","ResultDesc":"$bizDesc","OprTime":"$oprTime"#ifExistString($req "smsVerify")}

#macro(ifExistString $obj $key)#if($obj.containsKey($key)),"$key":"$obj.getString($key)"#end#end

渲染后结果:

{"IDType":"01","IDValue":"12345678","OprNumb":"2023091414515","BizOrderResult":"0000","ResultDesc":"成功","OprTime":"20230914145243"({"Channel":"22","OprTime":"20230914145240","BizVersion":"1.0.0","EfftTime":"20230914145150","BizType":"1031","OprNumb":"2023091414515","IDValue":"12345678","IDType":"01","ExtendInfo":[{"InfoCode":"Goods","InfoValue":"2023999500"}],"OprCode":"01"} "smsVerification")}

初步分析

#ifExistString($req "smsVerify")渲染时未成功调用宏函数,直接被渲染为:($req "smsVerify")

疑问点

检查了代码包和配置:相同的代码逻辑、相同的模板,测试环境可正常渲染,正式环境会出现上面的问题。
检查了两个环境均使用JDK1.8、velocity-engine-core-2.3.jar
没什么思路了,还可能是什么原因?

引用 皆我百晓生 小程序回复内容作答:
可能原因:

  1. 检查两个环境的Velocity版本是否一致,或者是否有其他相关依赖版本不一致导致的问题。
  2. 检查两个环境的模板配置是否一致,可能是在正式环境中配置有误导致宏函数无法正确渲染。
  3. 检查模板中宏函数的定义是否正确,可能是正式环境中宏函数定义有误导致无法调用。

解决方案:

  1. 确保测试环境和正式环境使用的Velocity版本一致。
  2. 检查正式环境中的模板配置是否正确,修改配置以保证宏函数可以被正确识别和调用。
  3. 检查宏函数的定义是否正确,修改模板以保证正确调用宏函数。
  4. 如果以上方法都无法解决问题,可以考虑升级Velocity版本或者使用其他的模板引擎进行渲染。