freemarker的template用法
package cn.itcast.ssm.util; import com.alibaba.fastjson.JSONObject;
import freemarker.cache.StringTemplateLoader;
import freemarker.template.Configuration;
import freemarker.template.Template;
import freemarker.template.Version;
import org.apache.commons.io.output.ByteArrayOutputStream;
import org.apache.commons.lang.StringUtils; import java.io.IOException;
import java.io.InputStream;
import java.io.StringWriter;
import java.util.HashMap;
import java.util.Map; /**
* Created by luojie on 2018/3/28.
*/
public class TemplateUtil { private static final String BASE_PATH = "/template/";
private static final String SUFFIX = ".ftl"; private static Map<String, String> TEMPLATE_MAP = new HashMap<String, String>(); public static String getTemplate(String id) throws IOException {
String template = TEMPLATE_MAP.get(id);
if (StringUtils.isBlank(template)) {
StringBuffer path = new StringBuffer();
path.append(BASE_PATH).append(id).append(SUFFIX);
template = inputStream2String(TemplateUtil.class.getResourceAsStream(path.toString()));
//template = StringUtils.deleteWhitespace(template);
TEMPLATE_MAP.put(id, template);
}
return template;
} /**
* 将stream 转成字符串
*
* @param is
* @return
* @throws IOException
*/
private static String inputStream2String(InputStream is) throws IOException {
ByteArrayOutputStream baos = new ByteArrayOutputStream();
int i = -1;
while ((i = is.read()) != -1) {
baos.write(i);
}
return baos.toString();
} public static String getTemplate(String id, Object data) throws Exception {
String source = getTemplate(id); Configuration cfg = new Configuration(new Version("2.3.23"));
StringTemplateLoader loader = new StringTemplateLoader();
loader.putTemplate("", source);
cfg.setTemplateLoader(loader);
cfg.setDefaultEncoding("UTF-8"); Template template = cfg.getTemplate("");
StringWriter writer = new StringWriter();
template.process(JSONObject.toJSON(data), writer);
source = writer.toString();
return source;
} public static void main(String[] args) {
String r = null;
try { JSONObject data = new JSONObject();
data.put("loginId", "1234123");
data.put("password", "1234123");
data.put("location", "location");
data.put("data", data); r = TemplateUtil.getTemplate("1001", data);
System.out.println(r);
} catch (Exception e) {
//e.printStackTrace();
}
}
}
<?xml version="1.0" encoding="utf-8" ?>
<Account messageType="1001" secretKey="123">
<reqData>
<loginId><#if loginId??>${loginId}</#if></loginId>
<password><#if password??>${password}</#if></password>
<#if location??><location>${location}</location></#if>
<tradeSummary>test</tradeSummary>
</reqData>
</Account>
xml转json
<dependency>
<groupId>net.sf.json-lib</groupId>
<artifactId>json-lib</artifactId>
<version>2.4</version>
</dependency>
<dependency>
<groupId>xom</groupId>
<artifactId>xom</artifactId>
<version>1.2.5</version>
</dependency>
r = TemplateUtil.getTemplate("32000001", data);
System.out.println(r);
XMLSerializer xmlSerializer = new XMLSerializer();
String json = xmlSerializer.read(r).toString();
JSONObject resultData = com.alibaba.fastjson.JSON.parseObject(json).getJSONObject("reqData");
System.out.println(resultData);
freemarker的template用法的更多相关文章
- C++ primer里的template用法
来源:http://c.chinaitlab.com/cc/ccjq/200806/752604_2.html -- template 的用法 在程序设计当中经常会出现使用同种数据结构的不同实 ...
- Go标准库:Go template用法详解
本文只介绍template的语法和用法,关于template包的函数.方法.template的结构和原理,见:深入剖析Go template. 入门示例 以下为test.html文件的内容,里面使用了 ...
- Freemarker 程序开发
Freemarker 程序开发 现在web开发中,多使用freemarker 来描述页面.通常会使用的macro来定义各种组件,从而达到UI组件的复用.结合使用其它的指定,可快速的描述一个html页面 ...
- 初建FreeMarker工程
初建FreeMarker工程 ——@梁WP 背景:听说freemarker可以用来写页面的组件,热衷于编写可重用代码的我,迫不及待地研究了freemarker,不过,在写组件之前,还是先研究一下fre ...
- Freemarker 简介
1.动态网页和静态网页差异 在进入主题之前我先介绍一下什么是动态网页,动态网页是指跟静态网页相对应的一种网页编程技术.静态网页,随着HTML代码的生成,页面的内容和显示效果就不会再发生变化(除非你修改 ...
- freeMarker(八)——程序开发指南之配置(Configuration)
学习笔记,选自freeMarker中文文档,译自 Email: ddekany at users.sourceforge.net 1.基本内容 配置(configuration)就是 freemark ...
- Spring Boot 整合 Freemarker,50 多行配置是怎么省略掉的?
Spring Boot2 系列教程接近完工,最近进入修修补补阶段.Freemarker 整合貌似还没和大家聊过,因此今天把这个补充上. 已经完工的 Spring Boot2 教程,大家可以参考这里: ...
- Spring Boot2 系列教程(十)Spring Boot 整合 Freemarker
今天来聊聊 Spring Boot 整合 Freemarker. Freemarker 简介 这是一个相当老牌的开源的免费的模版引擎.通过 Freemarker 模版,我们可以将数据渲染成 HTML ...
- Freemarker简单封装
Freemarker是曾经很流行的一个模板库,它是一种通用的模板库,不仅仅可以用来渲染html. 模板可以分为两类: 只能生成特殊类型文件的模板,如jinja.django.Thymeleaf.jad ...
随机推荐
- gradle set
gradle安装 1◆ gradle下载 http://services.gradle.org/distributions/ 2◆ 配置环境 =====>D:\envs\grad ...
- Oracle如何解决日期格式“01-3月 -18”的显示问题(3种处理方式)
今天查询表数据还是出现上次那种问题,但是每次都要去调用转化函数,比较麻烦,所以找一下资料,得到几种方式解决oralce的日期数据显示格式 问题描述: 解决方法 1)方法1:调用Oracle函数转化成日 ...
- CSS多div放一行
HTML代码 <body> <div class="right"></div> <div class="left"&g ...
- MySQL 数据库备份策略:全备与增量备份
一.备份策略1.周日全备份,周一至周六增量备份2.全备份目录/u03/backup/innobackup/full_backup3.增量备份目录/u03/backup/innobackup/incre ...
- TTL反相器的外部特性
TTL反相器的外部特性 电压传输特性 输入端噪声容限特性 静态输入特性: 静态输出特性: 动态特性: 传输延迟时间:是由晶体管的延迟时间,电阻以及寄生电容元素引起的.包括俩部分:输入由低电平跳为高电平 ...
- Scrapy结构
http://scrapy-chs.readthedocs.io/zh_CN/1.0/intro/overview.html scrapy 使用Twisted 这个异步网络库来处理网络通信,使用pyt ...
- 异步IO(协程,消息循环队列)
同步是CPU自己主动查看IO操作是否完成,异步是IO操作完成后发出信号通知CPU(CPU是被通知的) 阻塞与非阻塞的区别在于发起IO操作之后,CPU是等待IO操作完成再进行下一步操作,还是不等待去做其 ...
- (C/C++学习笔记)附页: C/C++变量的存储类型
- (C/C++学习笔记) 八. 程序控制语句
八. 程序控制语句 ● 基础知识 算法的基本控制结构: 顺序结构(sequential structure), 选择结构(case structure), 循环结构(loop structure) c ...
- win 10 初始环境变量
有时用户会修改Win10系统的环境变量,改到后面原来是什么的也记不得了,想要改回去还要去别的电脑查看,这里转载下Win10 64位环境变量的默认初始值. 附:打开环境变量方法:电脑左下右键——系统—— ...