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. shell脚本分析二

    Shell 基本运算符Shell 和其他编程语言一样,支持多种运算符,包括: 算数运算符 关系运算符 布尔运算符 字符串运算符 文件测试运算符原生bash不支持简单的数学运算,但是可以通过其他命令来实 ...

  2. js评分

    js评分    原理:给ele挂载一个自定义属性保存选中的星星数,鼠标经过时,显示所在星数的评价内容,以及给他星星亮起来,鼠标移开时显示的星星数时选择的星星数,没选的话是默认星星数,点击时,将选中的星 ...

  3. vs2015 产品密钥

    一.破解秘钥 企业版    HM6NR-QXX7C-DFW2Y-8B82K-WTYJV 专业版    HMGNV-WCYXV-X7G9W-YCX63-B98R2 二.破解步骤 1.安装vs2015 2 ...

  4. dell win10 productkey

  5. leetcode python 004

    ##  已知l1,l2均为升序数组,##  在两数组l1,l2中寻找第n位数,##  两数组中位数中,前者大于后者,说明后者中位数以下的成员必定在真正中位数之下##  可以将其剔除,剔除a个元素后的两 ...

  6. tf.nn.conv2d

    tf.nn.conv2d(input, filter, strides, padding, use_cudnn_on_gpu=None, name=None) input: 指需要做卷积的输入图像,它 ...

  7. python验证代理IP

    接上一篇保存的IP地址,进行验证 # -*- coding: utf-8 -*- import requests from threading import Thread import threadi ...

  8. SQL-10 获取所有非manager的员工emp_no

    题目描述 获取所有非manager的员工emp_noCREATE TABLE `dept_manager` (`dept_no` char(4) NOT NULL,`emp_no` int(11) N ...

  9. HDU 2602 Bone Collectors(背包问题,模版)

    Bone Collector Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)To ...

  10. mybatis学习(三)----优化Mybatis配置文件中的配置

    一.把连接数据库的配置单独放在一个properties文件中 前面我们是把数据库的连接信息放在了mybatis-config.xml中,如下: <?xml version="1.0&q ...