首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 綜合教學

Java FreeMarker 工具類實戰:輕鬆實現模板字符串生成

     編輯:Java 綜合教學

前言

FreeMarker 是一款流行的 Java 模板引擎,廣泛用於生成文本輸出(如 HTML、郵件、代碼、配置文件等)。在項目中,我們經常需要將數據填充到預定義的模板中生成最終字符串。為了簡化這一過程,封裝一個通用的 FreeMarkerUtil 工具類是非常有必要的。本文將通過完整的代碼示例,展示如何構建並使用該工具類。

核心工具類:FreeMarkerUtil

該工具類封裝了 FreeMarker 的配置初始化、模板加載與數據處理邏輯,提供靜態方法 geneFileStr 直接返回渲染後的字符串。

package pers.kangxu.datautils.utils;

import java.io.File;
import java.io.StringWriter;
import java.util.Map;

import pers.kangxu.datautils.common.Constants;
import freemarker.template.Configuration;
import freemarker.template.Template;

/**
 * FreeMarker 模板工具類
 * @author kangxu
 */
public class FreeMarkerUtil {

    /**
     * 根據模板文件和數據生成字符串
     * @param fltFile 模板文件名 (如 sms.flt)
     * @param templatePath 模板文件路徑 (如 src/template)
     * @param datas 數據模型 Map
     * @return 渲染後的字符串,失敗返回 null
     */
    public static String geneFileStr(String fltFile, String templatePath, Map<String, Object> datas) {
        Configuration cfg = new Configuration();
        try {
            // 設置模板加載目錄
            cfg.setDirectoryForTemplateLoading(new File(templatePath));
            // 獲取模板,指定編碼
            Template template = cfg.getTemplate(fltFile, Constants.ENCODING);
            template.setEncoding(Constants.ENCODING);

            // 使用 StringWriter 接收輸出
            StringWriter out = new StringWriter();
            template.process(datas, out);

            out.flush();
            out.close();
            return out.getBuffer().toString();
        } catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }
}

模板文件示例:sms.flt

模板文件採用 FreeMarker 語法,${code} 表示佔位符,將由數據模型中的 code 鍵值替換。

您的驗證碼是:${code}。請不要把驗證碼洩露給其他人。

測試驗證:FreeMarkerUtilTester

編寫測試類驗證工具類功能,模擬生成短信驗證碼場景。

package pers.kangxu.datautils.test;

import java.util.HashMap;
import java.util.Map;

import pers.kangxu.datautils.common.verifycode.BuildVerifyCode;
import pers.kangxu.datautils.utils.FreeMarkerUtil;

public class FreeMarkerUtilTester {
    public static void main(String[] args) {
        Map<String, Object> datas = new HashMap<>();
        // 假設 BuildVerifyCode 生成 4 位驗證碼
        datas.put("code", BuildVerifyCode.generateVerifyCode(4));
        
        // 調用工具類生成字符串
        String result = FreeMarkerUtil.geneFileStr("sms.flt", "template", datas);
        System.out.println(result);
    }
}

運行結果

控制台輸出類似如下內容,證明模板渲染成功:

您的驗證碼是:A1B2。請不要把驗證碼洩露給其他人。

運行結果截圖

總結

通過封裝 FreeMarkerUtil,我們將模板引擎的初始化與處理細節隱藏起來,業務代碼只需關注「模板名」、「路徑」和「數據」,極大地提高了開發效率並降低了出錯概率。這種模式在生成靜態頁面、郵件通知、代碼生成器等場景中極為實用。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved