在Java中FreeMarker?模板來定義字符串模板
問題描述
- 一個業(yè)務(wù)需求,需要在后端通過代碼渲染一個,列表如下圖所示(下圖只是一個示意):

這個表格的特點就是數(shù)據(jù)重復(fù)比較多,結(jié)構(gòu)簡單,我們可以通過 Java 代碼直接拼字符串。但是這樣的問題就會導致,代碼非常的難看。在 Java 代碼中混雜著很多樣式代碼,可讀性和可維護性比較差。所以我就 pass 著這個方案。
于是我就想到,通過模板 + 參數(shù)的方式來實現(xiàn),這樣可以做到結(jié)構(gòu)和參數(shù)的分離,經(jīng)過比較我選擇了通過 FreeMarker 模板來定義結(jié)構(gòu),最終完成字符串模板的定義。
代碼實現(xiàn)
- 導入依賴,這里我是基于
spring-boot為基礎(chǔ)的。
implementation 'org.springframework.boot:spring-boot-starter-freemarker'
- FreeMarker 工具方法,主要是實現(xiàn)模板文件的讀取和渲染。
@Slf4j
public class FreeMarkerUtils {
static Configuration cfg = new Configuration(Configuration.DEFAULT_INCOMPATIBLE_IMPROVEMENTS);
static {
cfg.setEncoding(Locale.ENGLISH, "utf-8");
cfg.setTemplateLoader(new SpringTemplateLoader(new DefaultResourceLoader(),"templates/"));
}
/**
* 獲取模板
*
* @param templateName
* @return
*/
public static Template getTpl(String templateName){
try {
Template template = cfg.getTemplate(templateName);
return template;
} catch (Exception e) {
log.error("獲取模板失敗 {}",templateName,e);
return null;
}
}
/**
* 獲取模板寫入后的內(nèi)容
*
* @param templateName
* @param model
* @return
*/
public static Optional<String> getTplText(String templateName, Map<String, Object> model){
try {
Template template = cfg.getTemplate(templateName);
String text = FreeMarkerTemplateUtils.processTemplateIntoString(template, model);
return Optional.ofNullable(text);
} catch (Exception e) {
log.error("獲取模板內(nèi)容失敗 {}",templateName,e);
return Optional.empty();
}
}
}- 定義模板,如下所示(下面知識一個示意):
<#list list as item>
${item.url} | ${item.name} | ${item.age}
</#list>- 使用模板并且返回渲染后的字符串,最終返回字符串。
Map<String, Object> model = new HashMap<>();
model.put("list", new ArrayList())
FreeMarkerUtils.getTplText("a.html", model);問題總結(jié)
- 我們使用模板的方式可以減少字符串的拼接,提高代碼的可維護性。
- 如果我們系統(tǒng)中代碼風格比較統(tǒng)一,我們可以通過這種方式來生成代碼(只需要對數(shù)據(jù)庫的 table meta 進行讀取,然后再定義 Java 代碼模板即可)。
到此這篇關(guān)于在Java中FreeMarker 模板來定義字符串模板的文章就介紹到這了,更多相關(guān)FreeMarker 定義字符串內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- java Spring整合Freemarker的詳細步驟
- Java操作FreeMarker模板引擎的基本用法示例小結(jié)
- 使用Java進行FreeMarker的web模板開發(fā)的基礎(chǔ)教程
- 基于Java的Spring框架來操作FreeMarker模板的示例
- java Freemarker頁面靜態(tài)化實例詳解
- Java實現(xiàn)用Freemarker完美導出word文檔(帶圖片)
- 基于Freemarker和xml實現(xiàn)Java導出word
- JAVA集成Freemarker生成靜態(tài)html過程解析
- Java超級實用的Freemarker工具類
- Java使用Freemarker頁面靜態(tài)化生成的實現(xiàn)
相關(guān)文章
Java?Dubbo服務(wù)調(diào)用擴展點Filter使用教程
Dubbo是阿里巴巴公司開源的一個高性能優(yōu)秀的服務(wù)框架,使得應(yīng)用可通過高性能的RPC實現(xiàn)服務(wù)的輸出和輸入功能,可以和Spring框架無縫集成2022-12-12
Mybatis MapperScannerConfigurer自動掃描Mapper接口生成代理注入到Spring的方法
這篇文章主要給大家介紹了關(guān)于Mybatis MapperScannerConfigurer自動掃描將Mapper接口生成代理注入到Spring的相關(guān)資料,文中通過示例代碼介紹的非常詳細,需要的朋友可以參考下2019-03-03
Java批量向PDF文件中添加圖像水印實現(xiàn)細節(jié)
這篇文章主要為大家介紹了Java批量向PDF文件中添加圖像水印實現(xiàn)細節(jié),有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2023-05-05
Spring Data環(huán)境搭建實現(xiàn)過程解析
這篇文章主要介紹了Spring Data環(huán)境搭建實現(xiàn)過程解析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下2020-08-08
springboot集成mybatis?plus和dynamic-datasource注意事項說明
這篇文章主要介紹了springboot集成mybatis?plus和dynamic-datasource注意事項說明,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-01-01

