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

网友投稿 439 2022-08-03


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

目录问题描述代码实现问题总结

问题描述

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

这个表格的特点就是数据重复比较多,结构简单,我们可以通过 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 moaQlcMwRpIdel

* @return

*/

public static Optional getTplText(String templateName, Map model){

try {

Template template = cfg.getTemplate(templateName);

String text = FreeMarkerTemplateUtils.processTemplateIntoString(template, model);

return Optional.ofNullable(text);

} catch (ExceaQlcMwRpIption e) {

log.error("获取模板内容失败 {}",templateName,e);

return Optional.empty();

}

}

}

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

<#list list as item>

${item.url} | ${item.name} | ${item.age}

#list>

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

Map model = new HashMap<>();

model.put("list", new ArrayList())

FreeMarkerUtils.getTplText("a.html", model);

问题总结

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


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:Java实战之医院管理系统的实现(基于javaweb的医院管理系统)
下一篇:Java使用POI将多个Sheet合并为一个Sheet(如何将多个sheet合并成一个sheet)
相关文章

 发表评论

暂时没有评论,来抢沙发吧~