首页 > 技术文章 > freemarker文件无法读取java boolean类型数据

smallHappyH 2020-08-23 09:56 原文

freemarker文件无法读取java boolean类型数据

用freemarker自动生成mapper.xml mybatis配置文件 但是在 <#if params.isPkey> 一直报 异常

严重: Error executing FreeMarker template
FreeMarker template error:
For "#if" condition: Expected a boolean, but this has evaluated to a method+sequence (wrapper: f.e.b.SimpleMethodModel):
==> params.islikeQuery  [in template "mapperxml.ftl" at line 8, column 22]

----
Tip: Maybe using obj.something() instead of obj.something will yield the desired value
----

----
FTL stack trace ("~" means nesting-related):
	- Failed at: #if params.islikeQuery  [in template "mapperxml.ftl" at line 8, column 17]
----

Java stack trace (for programmers):
----

代码如下:

<resultMap id="BaseResultMap" type=" ${entryClassPath?if_exists}.${entryName}">
	<#list columnList as params> 
	<#if params.isPkey>
	<id column="${params.fieldName}" property="${params.entryName}"/>
	<#else>
	<result column="${params.fieldName}" property="${params.entryName}"/>
	</#if>
	<result column="${params.fieldName}" property="${params.entryName}"/>
	</#list> 
</resultMap>

开始以为ftl不支持boolean类型 然后就用了下面的代码 发现还是报错

${params.isPkey?string('true','false')}

后来经过反复检查 检查实体对象封装的时候发现 在set get 时 java会自动的将 isPkey 字段会将生成set get方法时,

错误的代码:

public boolean isPkey() {
	return isPkey;
}
public void setPkey(boolean isPkey) {
	this.isPkey = isPkey;
}

发现 因为get set不规范,不能使用is 修改get方法就可以了

正确的代码:

public boolean getIsPkey() {
	return isPkey;
}
public void setPkey(boolean isPkey) {
	this.isPkey = isPkey;
}

推荐阅读