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用法的更多相关文章

  1. C++ primer里的template用法

    来源:http://c.chinaitlab.com/cc/ccjq/200806/752604_2.html --  template 的用法    在程序设计当中经常会出现使用同种数据结构的不同实 ...

  2. Go标准库:Go template用法详解

    本文只介绍template的语法和用法,关于template包的函数.方法.template的结构和原理,见:深入剖析Go template. 入门示例 以下为test.html文件的内容,里面使用了 ...

  3. Freemarker 程序开发

    Freemarker 程序开发 现在web开发中,多使用freemarker 来描述页面.通常会使用的macro来定义各种组件,从而达到UI组件的复用.结合使用其它的指定,可快速的描述一个html页面 ...

  4. 初建FreeMarker工程

    初建FreeMarker工程 ——@梁WP 背景:听说freemarker可以用来写页面的组件,热衷于编写可重用代码的我,迫不及待地研究了freemarker,不过,在写组件之前,还是先研究一下fre ...

  5. Freemarker 简介

    1.动态网页和静态网页差异 在进入主题之前我先介绍一下什么是动态网页,动态网页是指跟静态网页相对应的一种网页编程技术.静态网页,随着HTML代码的生成,页面的内容和显示效果就不会再发生变化(除非你修改 ...

  6. freeMarker(八)——程序开发指南之配置(Configuration)

    学习笔记,选自freeMarker中文文档,译自 Email: ddekany at users.sourceforge.net 1.基本内容 配置(configuration)就是 freemark ...

  7. Spring Boot 整合 Freemarker,50 多行配置是怎么省略掉的?

    Spring Boot2 系列教程接近完工,最近进入修修补补阶段.Freemarker 整合貌似还没和大家聊过,因此今天把这个补充上. 已经完工的 Spring Boot2 教程,大家可以参考这里: ...

  8. Spring Boot2 系列教程(十)Spring Boot 整合 Freemarker

    今天来聊聊 Spring Boot 整合 Freemarker. Freemarker 简介 这是一个相当老牌的开源的免费的模版引擎.通过 Freemarker 模版,我们可以将数据渲染成 HTML ...

  9. Freemarker简单封装

    Freemarker是曾经很流行的一个模板库,它是一种通用的模板库,不仅仅可以用来渲染html. 模板可以分为两类: 只能生成特殊类型文件的模板,如jinja.django.Thymeleaf.jad ...

随机推荐

  1. Win10系列:VC++ Direct3D模板介绍2

    (3)CreateDeviceResources函数 CreateDeviceResources函数默认添加在CubeRenderer.cpp源文件中,此函数用于创建着色器和立体图形顶点.接下来分别介 ...

  2. Win10系列:WinJS库控件

    在介绍了如何使用标准的HTML控件以及WinJS库中提供的新控件之后,下面来着重介绍WinJS库中几种常用的控件. (1)ListView控件 在开发Windows应用商店应用时可以使用ListVie ...

  3. assert用法

    assert宏的原型定义在<assert.h>中,其作用是如果它的条件返回错误,则终止程序执行,原型定义: void assert( int expression ); assert的作用 ...

  4. The difference between ppp and ndis

  5. Python之路-python基础二

    本章内容:      一.编码格式      二.常用数据类型      三.字符串常用方法      四.列表常用方法  五.数据运算      六.课后作业 编码格式:       ASCII A ...

  6. TModalResult 和 MessageBox 返回值

    //其实是对应的{ TModalResult values } const mrNone = ; mrOk = idOk; mrCancel = idCancel; mrAbort = idAbort ...

  7. VirtualBox安装CentOS7的网络配置

    VirtualBox安装CentOS7的网络配置 这几天在本机VirtualBox安装CentOS时遇到了网络的坑... VirtualBox的下载地址:https://www.virtualbox. ...

  8. 开发框架DevExtreme全新发布v18.2.6|附下载

    DevExtreme Complete Subscription是性能最优的 HTML5,CSS 和 JavaScript 移动.Web开发框架,可以直接在Visual Studio集成开发环境,构建 ...

  9. mail.jar 发送邮件

    1.spring参数注入+util 发送邮件 2.util配置参数+util发送邮件 1.spring参数注入+util 发送邮件 <bean id="mailSender" ...

  10. 二分查找(lower_bound和upper_bound)

    转载自:https://www.cnblogs.com/luoxn28/p/5767571.html 1 二分查找 二分查找是一个基础的算法,也是面试中常考的一个知识点.二分查找就是将查找的键和子数组 ...