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. javascript 多个onclick function 取对应值

    方法1: 直接获取值 <button onclick="aa(1)">执行</button> <button onclick="aa(2)& ...

  2. laravel中判断当前页面与连接地址是否一致,并添加效果:

  3. pl/sql美化

    因为这个问题曾经浪费过俺很多时间,不过今天终于发现一个小技巧,分享给大家, 在上面DDL语句前后加上begin 和 end,哈哈,再美化下试试看,DDL被成功被美化了. 具体如下: begin---① ...

  4. xadmin后台分段导出避免timeout

    一.问题 xadmin后台功能很强大,特别在导出的时候格式有xls/xlsx.csv.xml.json.实际常用的还是前面2种.xls格式使用的xlwt,有个缺陷,导出数据过大时,会报ValueErr ...

  5. Java正则表达式校验

    package com.study.string; import java.util.regex.Matcher; import java.util.regex.Pattern; /** * 正则表达 ...

  6. jenkins+findbugs+checkstyle+PMD静态代码检查(二)

    可以根据自己的需求选中对应的插件进行配置(不一定非要同时配置三个插件) jenkins:持续集成的工具 fundbugs:检测代码静态错误的插件  例如:定义了没有用到的对象,string类型的比较使 ...

  7. 关于MEX函数的说明

    reference:http://www.mathworks.com/help/matlab/ref/mex.html .MEX文件是一种可在matlab环境中调用的C(或fortran)语言衍生程序 ...

  8. Android开发---如何操作资源目录中的资源文件3--圆角边框、背景颜色渐变效果、边框颜色

    Android开发---如何操作资源目录中的资源文件3 效果图 1.圆角边框 2.背景颜色渐变效果 1.activity_main.xml 描述: 定义了一个shape资源管理按钮 <?xml ...

  9. 最全的javascriptt选择题整理

    一.单项选择(165题) 1.HTML是什么意思? A)高级文本语言 B)超文本标记语言 C)扩展标记语言 D)图形化标记语言 2.浏览器针对于HTML文档起到了什么作用? A)浏览器用于创建HTML ...

  10. HihoCoder - 1483 区间最值

    给定n个数A1...An,小Ho想了解AL..AR中有多少对元素值相同.小Ho把这个数目定义为区间[L,R]的价值,用v[L,R]表示. 例如1 1 1 2 2这五个数所组成的区间的价值为4. 现在小 ...