欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

在Java中FreeMarker?模板來定義字符串模板

 更新時(shí)間:2022年04月22日 10:05:43   作者:心城以北?  
這篇文章主要介紹了在Java中FreeMarker?模板來定義字符串模板,文章基于Java的相關(guān)資料展開詳細(xì)內(nèi)容,需要的小伙伴可以參考一下

問題描述

  • 一個(gè)業(yè)務(wù)需求,需要在后端通過代碼渲染一個(gè),列表如下圖所示(下圖只是一個(gè)示意):

image.png

這個(gè)表格的特點(diǎn)就是數(shù)據(jù)重復(fù)比較多,結(jié)構(gòu)簡單,我們可以通過 Java 代碼直接拼字符串。但是這樣的問題就會導(dǎo)致,代碼非常的難看。在 Java 代碼中混雜著很多樣式代碼,可讀性和可維護(hù)性比較差。所以我就 pass 著這個(gè)方案。

于是我就想到,通過模板 + 參數(shù)的方式來實(shí)現(xiàn),這樣可以做到結(jié)構(gòu)和參數(shù)的分離,經(jīng)過比較我選擇了通過 FreeMarker 模板來定義結(jié)構(gòu),最終完成字符串模板的定義。

代碼實(shí)現(xiàn)

  • 導(dǎo)入依賴,這里我是基于 spring-boot 為基礎(chǔ)的。
implementation 'org.springframework.boot:spring-boot-starter-freemarker'
  • FreeMarker 工具方法,主要是實(shí)現(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();
        }
    }


}
  • 定義模板,如下所示(下面知識一個(gè)示意):
<#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é)

  • 我們使用模板的方式可以減少字符串的拼接,提高代碼的可維護(hù)性。
  • 如果我們系統(tǒng)中代碼風(fēng)格比較統(tǒng)一,我們可以通過這種方式來生成代碼(只需要對數(shù)據(jù)庫的 table meta 進(jìn)行讀取,然后再定義 Java 代碼模板即可)。

到此這篇關(guān)于在Java中FreeMarker 模板來定義字符串模板的文章就介紹到這了,更多相關(guān)FreeMarker 定義字符串內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Spring Cloud 服務(wù)網(wǎng)關(guān)Zuul的實(shí)現(xiàn)

    Spring Cloud 服務(wù)網(wǎng)關(guān)Zuul的實(shí)現(xiàn)

    這篇文章主要介紹了Spring Cloud 服務(wù)網(wǎng)關(guān)Zuul的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-07-07
  • 理解Java中的靜態(tài)綁定和動態(tài)綁定

    理解Java中的靜態(tài)綁定和動態(tài)綁定

    這篇文章主要幫助大家理解Java中的靜態(tài)綁定和動態(tài)綁定,在Java中存在兩種綁定方式,一種為靜態(tài)綁定,另一種就是動態(tài)綁定,亦稱為后期綁定,感興趣的小伙伴們可以參考一下
    2016-02-02
  • java自定義ClassLoader加載指定的class文件操作

    java自定義ClassLoader加載指定的class文件操作

    這篇文章主要介紹了java自定義ClassLoader加載指定的class文件操作,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-02-02
  • Java如何獲取接口所有的實(shí)現(xiàn)類

    Java如何獲取接口所有的實(shí)現(xiàn)類

    這篇文章主要介紹了Java如何獲取接口所有的實(shí)現(xiàn)類,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-01-01
  • Java日期操作類常見用法示例

    Java日期操作類常見用法示例

    這篇文章主要介紹了Java日期操作類常見用法,結(jié)合實(shí)例形式分析了java針對日期時(shí)間的獲取、轉(zhuǎn)換常見操作技巧,需要的朋友可以參考下
    2019-07-07
  • Shiro:自定義Realm實(shí)現(xiàn)權(quán)限管理方式

    Shiro:自定義Realm實(shí)現(xiàn)權(quán)限管理方式

    這篇文章主要介紹了Shiro:自定義Realm實(shí)現(xiàn)權(quán)限管理方式,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-10-10
  • Java二叉樹的四種遍歷(遞歸和非遞歸)

    Java二叉樹的四種遍歷(遞歸和非遞歸)

    這篇文章主要介紹了Java二叉樹的四種遍歷,二叉樹的遍歷可以分為前序、中序、后序、層次遍歷,需要的朋友可以參考下
    2020-12-12
  • springboot2整合redis使用lettuce連接池的方法(解決lettuce連接池?zé)o效問題)

    springboot2整合redis使用lettuce連接池的方法(解決lettuce連接池?zé)o效問題)

    這篇文章主要介紹了springboot2整合redis使用lettuce連接池(解決lettuce連接池?zé)o效問題),本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-12-12
  • SpringBoot 調(diào)度任務(wù)及常用任務(wù)表達(dá)式

    SpringBoot 調(diào)度任務(wù)及常用任務(wù)表達(dá)式

    這篇文章主要介紹了SpringBoot 調(diào)度任務(wù)及常用任務(wù)表達(dá)式,需要的朋友可以參考下
    2017-12-12
  • Java中可變長度參數(shù)代碼詳解

    Java中可變長度參數(shù)代碼詳解

    這篇文章主要介紹了Java中可變長度參數(shù)代碼詳解,涉及了實(shí)參個(gè)數(shù)可變的定義方法,數(shù)組包裹實(shí)參等幾個(gè)問題,具有一定參考價(jià)值,需要的朋友可以了解下。
    2017-12-12

最新評論