当前位置: 首页 > news >正文

Springboot使用Freemark模板生成XML数据

前言

        FreeMarker 是一款模板引擎,即一种基于模板和要改变的数据,并用来生成输出文本(HTML网页,电子邮件,配置文件,源代码等)的通用工具。 其主要是将视图从业务逻辑中抽离处理,业务中不再包括视图的展示,而是将视图交给 FreeMarker 来输出,我们在此业务中就使用了生成xml文件的特性。

实战代码

1、导入依赖

        <dependency><groupId>org.freemarker</groupId><artifactId>freemarker</artifactId><version>2.3.29</version></dependency>

2、工具类

package com.sansint.system.cityCenter;import freemarker.template.Configuration;
import freemarker.template.Template;
import freemarker.template.TemplateException;import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.io.StringWriter;
import java.util.Map;public class FreeMarkerUtil {private static FreeMarkerUtil instance;private Configuration config;public static FreeMarkerUtil getInstance() {if (instance == null) {instance = new FreeMarkerUtil();}return instance;}private FreeMarkerUtil() {this.configInstance();}private void configInstance() {if (this.config == null) {this.config = new Configuration(Configuration.getVersion());this.config.setClassLoaderForTemplateLoading(FreeMarkerUtil.class.getClassLoader(), "/template");}}/***	根据模板,写入相关的信息数据* @param templateName* @param param* @return*/public String geneStr(String templateName, Map<String, Object> param) {StringWriter out = new StringWriter();Template tmp;try {this.config.setClassForTemplateLoading(this.getClass(), "/template");tmp = this.config.getTemplate(templateName, "UTF-8");tmp.process(param, out);out.flush();} catch (IOException e) {e.printStackTrace();} catch (TemplateException e) {e.printStackTrace();}finally {if(out!=null){try {out.close();} catch (IOException e) {e.printStackTrace();}}}return out.getBuffer().toString();}
}

3、在resource下创建template包和ftl的模版文件,如:

<?xml version="1.0" encoding="utf-8"?>
<root><common><building_id>${building_id}</building_id></common><data><meter pointcode="${pointcode}" energycode="${energycode}" time="${time}"><orgValue>${orgValue}</orgValue></meter></data>
</root>

4、调用

// 构建要替换的值
Map<String, Object> values = new HashMap<>();
values.put("building_id", getResult);
values.put("pointcode", bankDateEnergyList.get(0).getBranchCode());
values.put("energycode", "01A1A");
values.put("time", DateTimeUtil.format(dateTime, "yyyyMMddHH")+"0000");
values.put("orgValue", bankDateEnergyList.get(0).getEnergy());
// 生成替换后的 XML 字符串
String energyXml = FreeMarkerUtil.getInstance().geneStr("xianEnergy.ftl", values);

5、生成XML结果

<?xml version="1.0" encoding="utf-8"?>
<root><common><building_id>1231231</building_id></common><data><meter pointcode="1231231" energycode="01A1A" time="20250916140000"><orgValue>12312312</orgValue></meter></data>
</root>


文章转载自:

http://fAaSyiw0.dchpg.cn
http://h2PQYeuA.dchpg.cn
http://kMrca5wi.dchpg.cn
http://uHxb7kfA.dchpg.cn
http://BOPjHw5l.dchpg.cn
http://m9JX3xw9.dchpg.cn
http://aUyn1Kt7.dchpg.cn
http://QMzst7pN.dchpg.cn
http://1JLPGgIb.dchpg.cn
http://P2thfHYc.dchpg.cn
http://VjXKrLNu.dchpg.cn
http://jELrMUQt.dchpg.cn
http://x6V2IfGE.dchpg.cn
http://zPBOGqEB.dchpg.cn
http://Oetzm2wE.dchpg.cn
http://C3qGe41H.dchpg.cn
http://k63LH1E7.dchpg.cn
http://jd6rBSBT.dchpg.cn
http://nGm3O2xK.dchpg.cn
http://KY5nLw5R.dchpg.cn
http://AYVgOR6q.dchpg.cn
http://I6H4WUo1.dchpg.cn
http://FcgQg7w3.dchpg.cn
http://6xW7otxq.dchpg.cn
http://fzNM7XOL.dchpg.cn
http://shsg5SXW.dchpg.cn
http://1j4DaZci.dchpg.cn
http://gyKvizbN.dchpg.cn
http://oRQyT4HS.dchpg.cn
http://hBfwszlC.dchpg.cn
http://www.dtcms.com/a/385933.html

相关文章:

  • 【数据工程】 10. 半结构化数据与 NoSQL 数据库
  • HarmonyOS应用开发:深入ArkUI声明式开发与性能优化实践
  • Vue: 组件注册
  • 408考研计算机网络第38题真题解析(2024)
  • Uni-app 生命周期全解析
  • JavaEE开发技术(第一章:Servlet基础)
  • 【数据结构】跳表
  • 设计模式-桥接模式02
  • Linux 基础命令详解与学习笔记
  • 设计模式(C++)详解——桥接模式(2)
  • 鹧鸪云光储流程系统:以智能仓储管理,驱动项目高效协同
  • DIY Linux 桌面:WiFi 管理器
  • 从 Pump.fun「直播」看热点币的生与死
  • 《算法闯关指南:优选算法-双指针》--05有效三角形的个数,06查找总价值为目标值的两个商品
  • Java List 详解:从基础到进阶的全面指南
  • 【问题】自启动的容器在开机重启后 都退出了,未能正常启动
  • 苹果手机上有没有可以定时提醒做事的工具
  • blender多个动作导入到unity
  • 通过adb dump activity的configChanges配置
  • 智能语音机器人如何提升语音交互机器人的交互能力?
  • 一文读懂Docker:从入门到实践
  • 控制IP端口访问的方法
  • VS2017 下openssl-1.1.1+ libwebsockets-4.0.0 编译
  • 从 “无感服务” 到 “情感连接”:智慧园区如何用科技重构企业归属感
  • 封装形成用助焊剂:电子制造“隐形桥梁”的技术突围与全球产业重构
  • 3dsMax 2026 .NET Core 8 转型下的Maxscript脚本开发:动态编译模块的重构策略与兼容性升级路径
  • 高并发异步处理实战指南与性能优化策略
  • React18学习笔记(二) React的状态管理工具--Redux,案例--移动端外卖平台
  • ReactJS + DynamoDB 性能优化方案
  • Next.js与React服务端渲染演进全解析