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

Apache FreeMarker模板assign赋值后等值比较结果异常如何解决

问题根因

问题由两个错误共同导致:

  • 块级<#assign>语法会捕获块内所有输出内容,包括你写的换行、缩进字符,以及主动添加的双引号,最终i_type存储的实际值不是纯文本pqr,而是包含空白字符、双引号的字符串,和判断条件里的"pqr"天然不匹配。
  • 你在assign块内给字符串值额外加了双引号,FreeMarker不会把这部分当成字符串边界符,而是会作为字符串内容的一部分存储。

解决方案

推荐方案:改用表达式赋值(最规范)

直接用表达式给i_type赋值,不会捕获多余的空白、符号,原有判断逻辑可以直接生效:

<#assign i_type = x.has("type") ? (x.type == "ABC" ? "ABC" : x.type?lower_case) : "pqr">

可选方案1:保留块级assign写法

需要删除块内所有多余的缩进、换行,以及额外添加的双引号:

<#assign i_type><#if x.has("type")><#if x.type == "ABC">ABC<#else>${x.type?lower_case}</#if><#else>pqr</#if></#assign>

可选方案2:仅修改判断逻辑(临时兼容)

如果暂时不想调整assign语句,可以在判断时对i_type做清洗后再比较:

"final_type" : <#if i_type?has_content && i_type?trim?remove_quotes == "pqr">1<#else>0</#if>

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 22:30:05