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);

 

posted on 2018-03-28 11:40  james-roger  阅读(2784)  评论(0编辑  收藏  举报