在六月份的時候,接觸到的freemarker這個模板引擎。當時項目上由於須要在已經固定好模板的json串根據獲取的不一樣參數,生成不一樣參數的json。最開始我是在方法中用jsonObject這個對象去拼裝json,後面因爲靈活性過低。改個屬性須要改動大。後面在網上尋找一些方法就找到這個freemaker這個模板引擎。
在項目中我是使用ftl類型文件提早把模板json寫好,在方法中經過流讀取文件轉成字符串。再將拼接好的參數替換到json指定位置。
在這個替換的過程咱們須要注意一些字符作處理,否則參數替換後可能會生成一個不可讀的json串。(下面我就寫一下我在作的過程當中遇到的一些小問題)
一、數字型參數不作處理到千位數會有逗號(1,000)json
這種時候咱們須要在模板這個set參數的位置加個?c "length":${column.length?c}
二、有時候傳的參數裏面帶有"這種時候會使生成的json串沒法識別這時候咱們須要使用替換字符串方法replace 將參數中"的替換成\"數組
"formulaExpression":"${formulaExpression?replace("\"", '\\"')}"
三、將參數boolean型轉成string型app
"useScpUpload":${isTrue?string('true','false')}
四、在遍歷數組時經常使用的屬性code
<#list 集合 as 循環的變量> <#list gpProblemSet as columnMapping> ${columnMapping.id}/${columnMapping.name} </#list>
4-1 循環的變量_has_next(表示是否還有下一個,有則加上標籤內容)orm
<#list gpProblemSet as columnMapping> { "sourceColumnCode":"${columnMapping.sourceColumnCode}" } <#if columnMapping_has_next>,</#if> </#list>
4-2 循環的變量_index(表示當前遍歷數組的下標)對象
<#list gpProblemSet as columnMapping> { "index": "${columnMapping_index}" } </#list>
五、null值處理(name爲null)模板引擎
"name": ${name!} -->顯示空白 "name": ${name!'hello'} -->若name不爲空則顯示自己的值,不然顯示hello "name":<#if name?exists>不爲空</#if>
還有不少方法未用到,到時有用到在更新...字符串