FreeMarker 模板来定义字符串模板

简介: FreeMarker 模板来定义字符串模板

问题描述


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


image.png


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


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


代码实现


  1. 导入依赖,这里我是基于 spring-boot 为基础的。


implementation 'org.springframework.boot:spring-boot-starter-freemarker'


  1. 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();
        }
    }
}


  1. 定义模板,如下所示(下面知识一个示意):


<#list list as item>
    ${item.url} | ${item.name} | ${item.age}
</#list>


  1. 使用模板并且返回渲染后的字符串,最终返回字符串。


Map<String, Object> model = new HashMap<>();
model.put("list", new ArrayList())
FreeMarkerUtils.getTplText("a.html", model);


问题总结


  1. 我们使用模板的方式可以减少字符串的拼接,提高代码的可维护性。


  1. 如果我们系统中代码风格比较统一,我们可以通过这种方式来生成代码(只需要对数据库的 table meta 进行读取,然后再定义 Java 代码模板即可)。


相关文章
|
缓存 Linux Windows
flyingsaucer进行html文件转图片和pdf
目录 一、前言 二、html转图片 1、添加依赖 2、代码示例 (1)测试html文件 (2)代码示例 3、演示结果 三、html转pdf 1、添加依赖 2、代码示例 3、演示结果 四、注意点 1、html转图片的源url 2、部署到linux上后中文乱码 五、Linux上安装字体 1、拷贝字体 2、赋予权限 3、建立字体缓存 4、查看安装的字体
flyingsaucer进行html文件转图片和pdf
|
监控
zabbix关于Utilization of trapper processes over报警的处理及优化
zabbix关于Utilization of trapper processes over报警的处理及优化
1871 0
zabbix关于Utilization of trapper processes over报警的处理及优化
|
5月前
|
人工智能 安全 C++
一个项目能长期活下去,靠的从来不是模型
AI项目成败关键不在模型强弱,而在于系统性生存能力:厘清责任边界、接纳不确定性、严控复杂度、建立止损机制、允许模型“不万能”、并在模型成功时保持克制。真正活久的项目,清醒、务实、敬畏现实。
|
4月前
|
JavaScript 前端开发 API
GridForm:基于 Vue 3 + Ant Design Vue 的表格样式通用表单组件
基于 Vue 3 + Ant Design Vue 的表格样式通用表单组件
|
测试技术 索引
Elasticsearch search after分页检索案例
Elasticsearch search after分页检索案例分享 The best elasticsearch highlevel java rest api-----bboss 1.准备工作 参考文档《高性能elasticsearch ORM开发库使用介绍》导入和配置es客户端 2.
6138 0
|
人工智能 算法 Java
后端程序员逆袭之路:巧用 AI 工具,拿下高薪 offer
在技术职场中,后端程序员面临诸多挑战,如复杂业务逻辑、繁琐代码编写与调试及持续学习压力。然而,AI 工具的兴起为后端开发带来了全新机遇。智能代码生成工具如飞算 JavaAI 可高效完成需求分析、设计与代码生成;智能调试工具如 CodeGuru 能快速定位问题;知识学习工具如 ChatGPT 助力技术提升。借助这些工具,后端程序员不仅能显著提高项目质量和效率,还能展示技术前瞻性与学习能力,拓展技能边界,从而在求职市场中脱颖而出,顺利拿下高薪 offer。
|
12月前
|
算法 Linux 数据安全/隐私保护
快手养号一般要养多久才能成功
快手账号养成技术手册(2025版)
|
缓存 Java 应用服务中间件
nginx的正向代理和反向代理以及tomcat
Nginx的正向代理和反向代理功能在不同的场景中具有重要作用,正向代理主要用于客户端访问控制和匿名浏览,而反向代理则用于负载均衡和高可用性服务。Tomcat作为Java Web应用服务器,与Nginx结合使用,可以显著提升Web应用的性能和稳定性。通过合理配置Nginx和Tomcat,可以构建高效、稳定和可扩展的Web服务架构。
631 11
|
前端开发 JavaScript Java
模板引擎(Template Engine)是什么?
模板引擎(Template Engine)是一种用于生成文本输出的工具,尤其在Web开发中应用广泛。它的主要目的是将用户界面(通常是HTML等模板文件)与业务数据(内容)分离,从而提供一种高效、灵活的方式来生成动态内容。
1812 1