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

 更新时间:2022年04月22日 10:05:43   作者:心城以北   
这篇文章主要介绍了在Java中FreeMarker 模板来定义字符串模板,文章基于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 代码模板即可)。

到此这篇关于在Java中FreeMarker 模板来定义字符串模板的文章就介绍到这了,更多相关FreeMarker 定义字符串内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Spring Cloud 服务网关Zuul的实现

    Spring Cloud 服务网关Zuul的实现

    这篇文章主要介绍了Spring Cloud 服务网关Zuul的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-07-07
  • 理解Java中的静态绑定和动态绑定

    理解Java中的静态绑定和动态绑定

    这篇文章主要帮助大家理解Java中的静态绑定和动态绑定,在Java中存在两种绑定方式,一种为静态绑定,另一种就是动态绑定,亦称为后期绑定,感兴趣的小伙伴们可以参考一下
    2016-02-02
  • java自定义ClassLoader加载指定的class文件操作

    java自定义ClassLoader加载指定的class文件操作

    这篇文章主要介绍了java自定义ClassLoader加载指定的class文件操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2021-02-02
  • Java如何获取接口所有的实现类

    Java如何获取接口所有的实现类

    这篇文章主要介绍了Java如何获取接口所有的实现类,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-01-01
  • Java日期操作类常见用法示例

    Java日期操作类常见用法示例

    这篇文章主要介绍了Java日期操作类常见用法,结合实例形式分析了java针对日期时间的获取、转换常见操作技巧,需要的朋友可以参考下
    2019-07-07
  • Shiro:自定义Realm实现权限管理方式

    Shiro:自定义Realm实现权限管理方式

    这篇文章主要介绍了Shiro:自定义Realm实现权限管理方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-10-10
  • Java二叉树的四种遍历(递归和非递归)

    Java二叉树的四种遍历(递归和非递归)

    这篇文章主要介绍了Java二叉树的四种遍历,二叉树的遍历可以分为前序、中序、后序、层次遍历,需要的朋友可以参考下
    2020-12-12
  • springboot2整合redis使用lettuce连接池的方法(解决lettuce连接池无效问题)

    springboot2整合redis使用lettuce连接池的方法(解决lettuce连接池无效问题)

    这篇文章主要介绍了springboot2整合redis使用lettuce连接池(解决lettuce连接池无效问题),本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-12-12
  • SpringBoot 调度任务及常用任务表达式

    SpringBoot 调度任务及常用任务表达式

    这篇文章主要介绍了SpringBoot 调度任务及常用任务表达式,需要的朋友可以参考下
    2017-12-12
  • Java中可变长度参数代码详解

    Java中可变长度参数代码详解

    这篇文章主要介绍了Java中可变长度参数代码详解,涉及了实参个数可变的定义方法,数组包裹实参等几个问题,具有一定参考价值,需要的朋友可以了解下。
    2017-12-12

最新评论