freemarker是一款模板引擎,基于模板、用来生成输出文本的通用工具。
项目中导入工具包
<dependency>
<groupId>org.freemarker</groupId>
<artifactId>freemarker</artifactId>
<version>2.3.27-incubating</version>
</dependency>
准备模板文件
【个人信息】
姓名:${name}
住址:${address}
年龄:${age}
性别:${gender}
<#if company??>
工作单位:${company}
</#if>
在职状态:${workState}
其中<#if company??>***</#if>语句是判断参数company是否为空,若不为空则执行标签内的内容赋值,否则跳过标签内容。
注意:模板文件须得为ftl格式文件。例如我的文件命名为:InfoFreeMarker.ftl
模板导出工具类
public static String getEmailFreeMarker(Map<String, Object> context){
//定义返回字符串
String resultStr = "";
try {
//Configuration实例化 用来封装freemarker配置
Configuration cfg = new Configuration(Configuration.VERSION_2_3_26);
//获取模板文件的路径
String templatePath = FreeMarkerUtil.class.getResource("/").getPath()+"/com/nanfeng/util";
cfg.setDirectoryForTemplateLoading(new File(templatePath));
//设置默认编码格式
cfg.setDefaultEncoding("UTF-8");
//定义处理模板内部发生异常处理程序的类型为TemplateExceptionHandler 简单抛出异常即可
cfg.setTemplateExceptionHandler(TemplateExceptionHandler.RETHROW_HANDLER);
//指定由模板处理引发的TemplateException-s不由FreeMarker记录
cfg.setLogTemplateExceptions(false);
//指定在表达式求值或执行自定义指令期间引发的未经检查的异常将被包装到TemplateException-s中
cfg.setWrapUncheckedExceptions(true);
//定义模板文件具体文件名
Template template = cfg.getTemplate("InfoFreeMarker.ftl");
//控制运行时环境设置,定义具体的数据和输出流,将生成的结果写入输出流中
StringWriter writer = new StringWriter();
template.process(context, writer);
//将获取到处理好的输出流赋值给返回值
resultStr = writer.toString();
} catch (IOException e) {
e.printStackTrace();
} catch (TemplateException e) {
e.printStackTrace();
}
return resultStr;
}
启动方法
public static void main(String[] args) {
Map<String, Object> context = new HashMap<String, Object>();
context.put("name", "张三");
context.put("address", "北京");
context.put("age", "28");
context.put("gender", "男");
context.put("company", "网易");
context.put("workState", "在职");
String marker = FreeMarkerUtil.getEmailFreeMarker(context);
System.out.println(marker);
}