欢迎来到代码驿站!

JAVA代码

当前位置:首页 > 软件编程 > JAVA代码

在Java中FreeMarker 模板来定义字符串模板

时间:2023-03-08 12:02:09|栏目:JAVA代码|点击:

问题描述

  • 一个业务需求,需要在后端通过代码渲染一个,列表如下图所示(下图只是一个示意):

image.png

这个表格的特点就是数据重复比较多,结构简单,我们可以通过 Java 代码直接拼字符串。但是这样的问题就会导致,代码非常的难看。在 Java 代码中混杂着很多样式代码,可读性和可维护性比较差。所以我就 pass 着这个方案。

于是我就想到,通过模板 + 参数的方式来实现,这样可以做到结构和参数的分离,经过比较我选择了通过 FreeMarker 模板来定义结构,最终完成字符串模板的定义。

代码实现

  • 导入依赖,这里我是基于 spring-boot 为基础的。
implementation 'org.springframework.boot:spring-boot-starter-freemarker'
  • FreeMarker 工具方法,主要是实现模板文件的读取和渲染。
@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;
        }
    }

    /**
     * 获取模板写入后的内容
     *
     * @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("获取模板内容失败 {}",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);

问题总结

  • 我们使用模板的方式可以减少字符串的拼接,提高代码的可维护性。
  • 如果我们系统中代码风格比较统一,我们可以通过这种方式来生成代码(只需要对数据库的 table meta 进行读取,然后再定义 Java 代码模板即可)。

上一篇:SprinBoot如何集成参数校验Validator及参数校验的高阶技巧

栏    目:JAVA代码

下一篇:JavaWeb文件上传流程

本文标题:在Java中FreeMarker 模板来定义字符串模板

本文地址:http://www.codeinn.net/misctech/227050.html

推荐教程

广告投放 | 联系我们 | 版权申明

重要申明:本站所有的文章、图片、评论等,均由网友发表或上传并维护或收集自网络,属个人行为,与本站立场无关。

如果侵犯了您的权利,请与我们联系,我们将在24小时内进行处理、任何非本站因素导致的法律后果,本站均不负任何责任。

联系QQ:914707363 | 邮箱:codeinn#126.com(#换成@)

Copyright © 2020 代码驿站 版权所有