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

