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

Freemarker模板调用Integer.toHexString()报错,求助排查问题

问题分析与解决

错误原因

你的问题出在变量名冲突上:模板上下文(Items对象)中已经存在一个名为Integer的属性(是被包装成StringModel的org.json.JSONObject),它覆盖了你通过setSharedVariable注册的java.lang.Integer静态类引用。当模板访问Integer时,拿到的是这个JSON对象而非静态方法容器,因此调用toHexString会抛出异常。

解决方案

方案1:重命名共享变量

修改Java代码,给静态类引用换个不会冲突的名字,比如IntegerUtils:

cfg.setSharedVariable("IntegerUtils", BeansWrapper.getDefaultInstance()
        .getStaticModels()
        .get("java.lang.Integer"));

对应的模板代码调整为:

<#list Items.iterator() as var>
  <#assign hex = IntegerUtils.toHexString(var) />
  ${hex}
</#list>

方案2:使用Freemarker内置的statics指令

无需提前注册共享变量,直接在模板中通过statics获取java.lang.Integer的静态类:

<#list Items.iterator() as var>
  ${statics["java.lang.Integer"].toHexString(var)}
</#list>

或者先赋值再调用:

<#assign IntegerClass = statics["java.lang.Integer"]>
<#list Items.iterator() as var>
  <#assign hex = IntegerClass.toHexString(var) />
  ${hex}
</#list>

额外注意

确保var是数值类型(int/Integer),如果var是字符串类型,需要先转成数字:

${statics["java.lang.Integer"].toHexString(var?number)}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 12:45:47