将数据转换成xml格式的文档并下载
现在有一个实体类对象的集合,需要将它们转换为xml文档,xml文档就是标签集合的嵌套,例如一个学生类,有姓名、年龄等,需要转换成一下效果:
<student><age>14</age><name>张三</name></student><student><age>15</age><name>李四</name></student><student><age>16</age><name>王五</name></student>
首先定义student的实体类:
import lombok.Data;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;@Data
@XmlRootElement
public class Student {private String name;private int age;// 无参构造函数(必须有)public Student() {}public Student(String name, int age) {this.name = name;this.age = age;}@XmlElementpublic String getName() {return name;}public void setName(String name) {this.name = name;}@XmlElementpublic int getAge() {return age;}public void setAge(int age) {this.age = age;}
}
因为是student的集合,需要再构建一个StudentListWrapper类:
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;
import java.util.List;@XmlRootElement
public class StudentListWrapper {private List<Student> students;public StudentListWrapper() {}public StudentListWrapper(List<Student> students) {this.students = students;}@XmlElement(name = "student")public List<Student> getStudents() {return students;}public void setStudents(List<Student> students) {this.students = students;}
}
两种下载方式:无返回值的:
@GetMapping("testXmlDownload")public void testXmlDownload(HttpServletResponse response) throws Exception {try {// 创建一个包含 Student 对象的集合List<Student> studentList = new ArrayList<>();studentList.add(new Student("张三", 14));studentList.add(new Student("李四", 15));studentList.add(new Student("王五", 16));// 创建 JAXB 上下文JAXBContext context = JAXBContext.newInstance(StudentListWrapper.class);// 创建 MarshallerMarshaller marshaller = context.createMarshaller();marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);// 将集合序列化为 XMLStringWriter writer = new StringWriter();marshaller.marshal(new StudentListWrapper(studentList), writer);// 输出 XML 格式的文档String xmlDocument = writer.toString();byte[] bytes = xmlDocument.getBytes();// 使用 ByteArrayInputStream 将字节数组转换为 InputStreamInputStream inputStream = new ByteArrayInputStream(bytes);// 使用 BufferedInputStream 包装 InputStreamBufferedInputStream bufferedInputStream = new BufferedInputStream(inputStream);byte[] buffer = new byte[bufferedInputStream.available()];bufferedInputStream.read(buffer);bufferedInputStream.close();response.reset();response.setCharacterEncoding("UTF-8");response.addHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode("student".concat(".xml"), "UTF-8"));//response.addHeader("Content-Length", "" + file.length());OutputStream outputStream = new BufferedOutputStream(response.getOutputStream());response.setContentType("application/octet-stream");outputStream.write(buffer);outputStream.flush();// System.out.println(xmlDocument);} catch (Exception e) {e.printStackTrace();}}
第二种:使用 ResponseEntity 对象来封装响应内容和响应头,并返回给客户端:
@GetMapping("/download")public ResponseEntity<byte[]> downloadFile() throws Exception {// 创建一个包含 Student 对象的集合List<Student> studentList = new ArrayList<>();studentList.add(new Student("张三", 14));studentList.add(new Student("李四", 15));studentList.add(new Student("王五", 16));// 创建 JAXB 上下文JAXBContext context = JAXBContext.newInstance(StudentListWrapper.class);// 创建 MarshallerMarshaller marshaller = context.createMarshaller();marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);// 将集合序列化为 XMLStringWriter writer = new StringWriter();marshaller.marshal(new StudentListWrapper(studentList), writer);// 输出 XML 格式的文档String xmlContent = writer.toString();// byte[] bytes = xmlDocument.getBytes();// 将 XML 内容转换为字节数组byte[] xmlBytes = xmlContent.getBytes(StandardCharsets.UTF_8);// 构造响应头HttpHeaders headers = new HttpHeaders();headers.setContentType(MediaType.APPLICATION_XML);headers.setContentDispositionFormData("attachment", "students.xml");// 构造 ResponseEntity 对象,设置响应内容和响应头ResponseEntity<byte[]> responseEntity = new ResponseEntity<>(xmlBytes, headers, HttpStatus.OK);return responseEntity;}
使用postman测试:

复制到浏览器测试:

打开效果:

相关文章:
将数据转换成xml格式的文档并下载
现在有一个实体类对象的集合,需要将它们转换为xml文档,xml文档就是标签集合的嵌套,例如一个学生类,有姓名、年龄等,需要转换成一下效果: <student><age>14</age><name>张三</na…...
深入理解与实践AB测试:从理论到实战案例解析
一、引言 在互联网产品优化和运营策略制定中,AB测试(也称为分组测试或随机化对照实验)是一种科学且严谨的方法。它通过将用户群体随机分配至不同的实验组(通常是A组和B组),对比不同版本的产品或策略对关键…...
flask之请求钩子
请求钩子是通过装饰器的形式实现,Flask支持如下四种请求钩子: 1、before_first_request: 在第一次请求处理之前先被执行 2、before_request: 在每次请求前执行 3、after_request: 在每次请求处理之后被执行 接受一个参数:视图函数的响应在…...
COPY requires at least two arguments, docker COPY 报错
COPY requires at least two arguments # 使用 Node.js 12.16.0FROM node:12.16.0WORKDIR /appCOPY ..原因:Dockerfile文件COPY后的两个. 要加空格 本内容来源于小豆包,想要更多内容请跳转小豆包 》...
权限提升-Web权限提升篇划分获取资产服务后台系统数据库管理相互转移
知识点 1、权限提升转移-分类&高低&场景 2、Web权限提升及转移-后台&数据库 3、后台权限及转移-转移对象&后台分类 章节点: 1、Web权限提升及转移 2、系统权限提升及转移 3、宿主权限提升及转移 4、域控权限提升及转移 基础点 0、为什么我们要学…...
【Unity每日一记】unity中的内置宏和条件编译(Unity内置脚本符号)
👨💻个人主页:元宇宙-秩沅 👨💻 hallo 欢迎 点赞👍 收藏⭐ 留言📝 加关注✅! 👨💻 本文由 秩沅 原创 👨💻 收录于专栏:uni…...
发现有一个会Python的男友魅力值杠杠的!!!
Python能做什么? 可以做日常任务,比如自动备份你的MP3,可以做网站,很多著名的网站像知乎、YouTube就是Python写的, 可以做网络游戏的后台,很多在线游戏的后台都是Python开发的。 上面说的这些本人并没有实…...
SQL日期函数
文章目录 1.获取日期时间函数1.1 获取当前日期时间1.2 获取当前日期1.3 获取当前时间 2.日期格式化★★★2.1 日期转指定格式字符串2.2 字符串转日期 3.日期间隔3.1 增加日期间隔 ★★★3.2 减去一个时间间隔★★★3.3 日期相差天数(天)3.4 相差时间&…...
C语言经典面试题目(二十六)
1、解释一下C语言中的函数原型及其作用。 函数原型是指在函数定义之前声明函数的参数类型、返回类型和函数名称的一种声明方式。函数原型的作用包括: 编译器检查:函数原型能够告诉编译器函数的返回类型和参数类型,从而能够在编译阶段检查函…...
创建一个electron-vite项目
前置条件:非常重要!!! npm: npm create quick-start/electronlatest yarn: yarn create quick-start/electron 然后进入目录,下载包文件,运行项目 到以上步骤,你已经成功运行起来一个 electr…...
Codeforces Round 935 (Div. 3)A~E
A. Setting up Camp 题目分析: 有三种人,内向、外向、综合,内向必须独自一个帐篷,外向必须3个人一个帐篷,综合介于1~3人一个帐篷,我们发现非法情况只会存在外向的人凑不成3个人一个帐篷的情况,因外向不够可…...
ES: spring boot中使用ElasticsearchClient
一、依赖:(要根据不同版本的ES来调整依赖,否则会报错,不支持太低版本的ES,比如7.6以下的) <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-e…...
实体框架EF(Entity Framework)简介
实体框架EF(Entity Framework)简介 文章目录 实体框架EF(Entity Framework)简介一、概述二、O/R Mapping是什么采用O/R Mapping带来哪些好处 三、Entity Framework架构3.1 下图展示了Entity Framework的整体架构3.2 Entity Framew…...
使用CUDA 为Tegra构建OpenCV
返回:OpenCV系列文章目录(持续更新中......) 上一篇:MultiArch与Ubuntu/Debian 的交叉编译 下一篇:在iOS中安装 警告: 本教程可能包含过时的信息。 使用CUDA for Tegra 的OpenCV 本文档是构建支持 CUD…...
YoloV8改进策略:BackBone改进|PKINet
摘要 PKINet是面向遥感旋转框的主干,网络包含了CAA、PKI等模块,给我们改进卷积结构的模型带来了很多启发。本文,使用PKINet替代YoloV8的主干网络,实现涨点。PKINet是我在作者的模型基础上,重新修改了底层的模块,方便大家轻松移植到YoloV8上。 论文:《Poly Kernel Ince…...
如何在Linux系统部署Dupal CMS结合内网穿透实现无公网IP访问web界面
文章目录 前言1. Docker安装Drupal2. 本地局域网访问3 . Linux 安装cpolar4. 配置Drupal公网访问地址5. 公网远程访问Drupal6. 固定Drupal 公网地址 正文开始前给大家推荐个网站,前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默&a…...
小巧玲珑的SQLite
SQLite是桌面端和移动端的不错选择 前言 SQLite身影无处不在。 SQLite,是一款轻型的数据库,是遵守ACID的关系型数据库管理系统,它的设计目标是嵌入式的,而且目前已经在很多嵌入式产品中使用了它,它占用资源非常的低&a…...
【Android 内存优化】 native内存泄漏监控方案源码分析
文章目录 前言使用效果使用apiJNI的动态注册native方法动态注册 hook的实现android_dlopen_ext和dl_iterate_phdr naive监控的实现nativeGetLeakAllocs 总结 前言 Android的native泄漏怎么检测?下面通过研究开源项目KOOM来一探究竟。 使用效果 未触发泄漏前的日志…...
数据结构 二叉树 力扣例题AC——代码以及思路记录
LCR 175. 计算二叉树的深 某公司架构以二叉树形式记录,请返回该公司的层级数。 AC int calculateDepth(struct TreeNode* root) {if (root NULL){return 0;}else{return 1 fmax(calculateDepth(root->left), calculateDepth(root->right));} } 代码思路 …...
Android 11系统启动流程
在Android 11系统启动流程中,系统启动主要经历了以下几个阶段: 引导加载程序(Bootloader)启动: 当设备加电后,首先运行的是ROM Bootloader,它负责验证操作系统映像的完整性、初始化基本硬件并加…...
3个实用技巧:掌握Chrome文本替换插件的终极指南
3个实用技巧:掌握Chrome文本替换插件的终极指南 【免费下载链接】chrome-extensions-searchReplace 项目地址: https://gitcode.com/gh_mirrors/ch/chrome-extensions-searchReplace 你是否曾在浏览网页时发现错别字却无法修改?是否需要对大量重…...
万象视界灵坛实操手册:如何用8px硬边投影UI提升多模态分析沉浸感
万象视界灵坛实操手册:如何用8px硬边投影UI提升多模态分析沉浸感 1. 平台概述 万象视界灵坛是一款基于OpenAI CLIP技术的高级多模态智能感知平台。它将复杂的语义对齐过程转化为直观的像素风格交互体验,通过独特的16-Bit游戏美学设计,为用户…...
OKNet实战:用63x63超大卷积核搞定图像去雾/去雪/去模糊(附PyTorch配置指南)
OKNet实战:用63x63超大卷积核搞定图像去雾/去雪/去模糊(附PyTorch配置指南) 当你在处理一张被雾气笼罩的风景照,或是被雪花覆盖的街景,亦或是因手抖而模糊的人物特写时,是否曾想过AI如何让这些图像重获新生…...
nlp_gte_sentence-embedding_chinese-large详细步骤:Web界面三功能(向量化/相似度/检索)逐项演示
nlp_gte_sentence-embedding_chinese-large详细步骤:Web界面三功能(向量化/相似度/检索)逐项演示 你是不是经常遇到这样的问题?面对一堆文档,想快速找到和某个问题最相关的那几篇;或者想判断两段话说的到底…...
游戏串流技术选型指南:为什么Sunshine成为开源游戏串流首选方案
游戏串流技术选型指南:为什么Sunshine成为开源游戏串流首选方案 【免费下载链接】Sunshine Self-hosted game stream host for Moonlight. 项目地址: https://gitcode.com/GitHub_Trending/su/Sunshine 在构建家庭游戏云或远程游戏串流系统时,技术…...
Z-Image-Turbo新手教程:无需代码,用Gradio界面轻松玩转AI绘画
Z-Image-Turbo新手教程:无需代码,用Gradio界面轻松玩转AI绘画 1. 为什么选择Z-Image-Turbo? 如果你正在寻找一个既强大又易用的AI绘画工具,Z-Image-Turbo绝对值得一试。这个由阿里巴巴通义实验室开源的高效文生图模型࿰…...
Qwen2.5-VL-Chord视觉定位模型企业应用指南:低成本构建图像标注流水线
Qwen2.5-VL-Chord视觉定位模型企业应用指南:低成本构建图像标注流水线 1. 项目简介 1.1 什么是Chord视觉定位服务? Chord是一个基于Qwen2.5-VL多模态大模型的智能视觉定位系统。它能够理解自然语言描述,并在图像中精确定位目标对象&#x…...
自顶向下语法分析实战:从理论到LL(1)文法解析
1. 自顶向下语法分析入门指南 第一次接触自顶向下语法分析时,我完全被那些专业术语搞晕了。后来在实际项目中反复使用才发现,它其实就是一种"从整体到局部"的思考方式,就像我们读文章时先看目录再细读章节一样。这种分析方法特别适…...
MinerU文档理解效果展示:看AI如何精准识别复杂表格与公式
MinerU文档理解效果展示:看AI如何精准识别复杂表格与公式 1. 文档理解技术的新突破 在信息爆炸的时代,我们每天都要处理大量文档资料。从财务报表到学术论文,从合同协议到技术手册,这些文档中往往包含复杂的表格、公式和特殊排版…...
千问3.5-2B与卷积神经网络(CNN)的融合应用:多模态理解初探
千问3.5-2B与卷积神经网络(CNN)的融合应用:多模态理解初探 1. 跨模态AI的新突破 当语言模型遇上计算机视觉,会擦出怎样的火花?最近我们尝试将千问3.5-2B语言模型与经典的卷积神经网络(CNN)进行…...
