使用freemarker作为报文发送模版

FreeMarker 是一款 模板引擎: 即一种基于模板和要改变的数据, 并用来生成输出文本(HTML网页,电子邮件,配置文件,源代码等)的通用工具。 它不是面向最终用户的,而是一个Java类库,是一款程序员可以嵌入他们所开发产品的组件。

模板编写为FreeMarker Template Language (FTL)。它是简单的,专用的语言, 不是 像PHP那样成熟的编程语言。 那就意味着要准备数据在真实编程语言中来显示,比如数据库查询和业务运算, 之后模板显示已经准备好的数据。在模板中,你可以专注于如何展现数据, 而在模板之外可以专注于要展示什么数据。

这种方式通常被称为 MVC (模型 视图 控制器) 模式,对于动态网页来说,是一种特别流行的模式。 它帮助从开发人员(Java 程序员)中分离出网页设计师(HTML设计师)。设计师无需面对模板中的复杂逻辑, 在没有程序员来修改或重新编译代码时,也可以修改页面的样式。

下面的用法是发送报文:

1:首先需要下载freemarker包

    1.1:如果是maven项目,直接加入:

    
        org.freemarker
        freemarker
        2.3.22
    

    1.2:如果不是maven项目,直接下载freemarker.2.3.22.jar包。

2:freemarker模版
要发送报文,就需要报文模版,模版可以以任何后缀名结尾,常用的是.ftl结尾。

    模版名:accountQuery.ftl
    内容如下:
    
        
            
                ${version}
                ${date}
                <#if extension ?? && extension != "">
                ${extension}
                
            
        
    

新建一个templete文件夹或者包,将accountQuery.ftl放到templete下。    

新建的templete放到项目目录下:src/main/resources 或 src/main/java 目录下
都可以。

最后使用方法是将模版取出转换成自己想要的数据格式。下面是将模版先转换成string类
型,然后再转换成Document:
    /**
     * 获取模版
     * @param templateFileName 模版名称必须带后缀名
     * @return
     * @throws Exception
     */
    public static Template getFtlTemplete(String templateFileName) throws Exception{
        Configuration config = new Configuration(Configuration.VERSION_2_3_22);
        //如果当前类不是static,直接使用this.getClass()
        config.setClassForTemplateLoading(当前类.class, templatePath);
        config.setDefaultEncoding("UTF-8");//要UTF-8,不然中文乱码
        return config.getTemplate(templateFileName);
    }

    /**
     * 将模版转换成string
     * @param templateFileName
     * @param paramMap 模版中的变量赋值
     * @return
     * @throws Exception
     */
    public static String getFtlString(String templateFileName,Map paramMap) throws Exception{
        return FreeMarkerTemplateUtils.processTemplateIntoString(getFtlTemplete(templateFileName), paramMap);
    }

    /**
     * 获取document
     * @param sendReq
     * @param paramMap
     * @param templateFileName
     * @return
     * @throws Exception
     */
    public static Document getDocument(String sendReq,Map paramMap,String templateFileName) throws Exception{
        return getDocument(getFtlString(templateFileName,getRequestStringMap(paramMap, sendReq)));
    }

    /**
     * xml格式的String转Document
     * @param ftl
     * @return
     * @throws Exception
     */
    public static Document getDocument(String ftl) throws Exception{
        DocumentBuilderFactory docBuilderFactory = DocumentBuilderFactory.newInstance();
        docBuilderFactory.setNamespaceAware(true);
        DocumentBuilder docBuilder = docBuilderFactory.newDocumentBuilder();
        Document doc=docBuilder.parse(new InputSource(new StringReader(ftl)));
        return doc;
    }

    /**
     * 设置公共报文参数
     * @param map
     * @param sendReq
     * @return
     */
    public static Map getRequestStringMap(Map map,String sendReq){
        map.put("messageId", "122112");
        map.put("id", sendReq);
        map.put("version", "1.0.1");
        return map;
    }
    //调用 三个参数:业务类型 变量参数 模版名称
    BankHelper.getDocument("QUERY", paramMap, "accountQuery.ftl")

你可能感兴趣的:(FREEMARKER)