SpringBootWeb响应
一、练习目标加载并解析 xml 文件中的数据完成数据处理并在页面展示样例如下二、步骤记录1.项目目录2. EmpController.javapackage com.itheima.controller; import com.itheima.pojo.Emp; import com.itheima.pojo.Result; import com.itheima.utils.XmlParserUtils; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import java.io.InputStream; import java.util.List; RestController public class EmpController { RequestMapping(/listEmp) public Result list(){ //1. 加载并解析emp.xml //将 String file this.getClass().getClassLoader().getResource(emp.xml).getFile(); 修改为 InputStream inputStream this.getClass().getClassLoader().getResourceAsStream(emp.xml); InputStream inputStream this.getClass().getClassLoader().getResourceAsStream(emp.xml); ListEmp empList XmlParserUtils.parse(inputStream, Emp.class); //2. 对数据进行转换处理 - gender, job empList.stream().forEach(emp - { //处理 gender 1: 雄, 2: 雌 String gender emp.getGender(); if(1.equals(gender)){ emp.setGender(雄); }else if(2.equals(gender)){ emp.setGender(雌); } //处理job - 1: 正畜级大总管, 2: 副畜级形象大使 , 3: 正畜级智慧参谋4副畜级活力委员 String job emp.getJob(); if(1.equals(job)){ emp.setJob(正畜级大总管); }else if(2.equals(job)){ emp.setJob(副畜级形象大使); }else if(3.equals(job)){ emp.setJob(正畜级智慧参谋); }else if(4.equals(job)){ emp.setJob(副畜级活力委员); } }); //3. 响应数据 return Result.success(empList); } }3.Emp.javapackage com.itheima.pojo; public class Emp { private String name; private Integer age; private String image; private String gender; private String job; public Emp() { } public Emp(String name, Integer age, String image, String gender, String job) { this.name name; this.age age; this.image image; this.gender gender; this.job job; } public String getName() { return name; } public void setName(String name) { this.name name; } public Integer getAge() { return age; } public void setAge(Integer age) { this.age age; } public String getImage() { return image; } public void setImage(String image) { this.image image; } public String getGender() { return gender; } public void setGender(String gender) { this.gender gender; } public String getJob() { return job; } public void setJob(String job) { this.job job; } Override public String toString() { return Emp{ name name \ , age age , image image \ , gender gender \ , job job \ }; } }4.XmlParserUtils.javapackage com.itheima.utils; import org.dom4j.Document; import org.dom4j.Element; import org.dom4j.io.SAXReader; import java.io.InputStream; import java.lang.reflect.Constructor; import java.lang.reflect.Field; import java.util.ArrayList; import java.util.List; public class XmlParserUtils { //parse方法将方法参数 String file 修改为 InputStream inputStream。 public static T ListT parse(InputStream inputStream, ClassT targetClass) { ArrayListT list new ArrayListT(); //封装解析出来的数据 try { //1.获取一个解析器对象 SAXReader saxReader new SAXReader(); //2.利用解析器把xml文件加载到内存中,并返回一个文档对象 //将 saxReader.read(new File(file)); 修改为 saxReader.read(inputStream);。 Document document saxReader.read(inputStream); //3.获取到根标签 Element rootElement document.getRootElement(); //4.通过根标签来获取 user 标签 ListElement elements rootElement.elements(emp); //5.遍历集合,得到每一个 user 标签 for (Element element : elements) { //获取 name 属性 String name element.element(name).getText(); //获取 age 属性 String age element.element(age).getText(); //获取 image 属性 String image element.element(image).getText(); //获取 gender 属性 String gender element.element(gender).getText(); //获取 job 属性 String job element.element(job).getText(); //组装数据 ConstructorT constructor targetClass.getDeclaredConstructor(String.class, Integer.class, String.class, String.class, String.class); constructor.setAccessible(true); T object constructor.newInstance(name, Integer.parseInt(age), image, gender, job); list.add(object); } } catch (Exception e) { e.printStackTrace(); } return list; } }5.emp.html!DOCTYPE html html langen head meta charsetUTF-8 meta http-equivX-UA-Compatible contentIEedge meta nameviewport contentwidthdevice-width, initial-scale1.0 title员工信息/title /head link relstylesheet hrefelement-ui/index.css script src./js/vue.js/script script src./element-ui/index.js/script script src./js/axios-0.18.0.js/script body h1 aligncenter员工信息列表展示/h1 div idapp el-table :datatableData stylewidth: 100% stripe border el-table-column propname label姓名 aligncenter min-width20%/el-table-column el-table-column propage label年龄 aligncenter min-width20%/el-table-column el-table-column label图像 aligncenter min-width20% template slot-scopescope el-image :srcscope.row.image stylewidth: 80px; height: 50px;/el-image /template /el-table-column el-table-column propgender label性别 aligncenter min-width20%/el-table-column el-table-column propjob label职位 aligncenter min-width20%/el-table-column /el-table /div /body style .el-table .warning-row { background: oldlace; } .el-table .success-row { background: #f0f9eb; } /style script new Vue({ el: #app, data() { return { tableData: [] } }, mounted(){ axios.get(/listEmp).then(res{ if(res.data.code){ this.tableData res.data.data; } }); }, methods: { } }); /script /html6.emp.xml?xml version1.0 encodingUTF-8 ? emps emp name金毛狮王/name age6/age imagehttps://img95.699pic.com/photo/60025/2131.jpg_wh300.jpg!/fh/300/quality/90/image !-- 1: 雄, 2: 雌 -- gender1/gender !-- 1: 正畜级大总管, 2: 副畜级形象大使, 3: 正畜级智慧参谋4副畜级活力委员 -- job1/job /emp emp name白眉鹰王/name age3/age imagehttps://tse3-mm.cn.bing.net/th/id/OIP-C.D9ecxWXbFq0enDc62WnxbAHaE8?rs1amp;pidImgDetMain/image gender1/gender job2/job /emp emp name飞毛腿王/name age4/age imagehttps://tse3-mm.cn.bing.net/th/id/OIP-C.cRfi9VVQjkPemk_cOiyzGwHaE8?rs1amp;pidImgDetMain/image gender1/gender job3/job /emp emp name低底盘王/name age2/age imagehttps://pic2.zhimg.com/v2-0bf18b446deb4093c193d2782d7e38ef_r.jpg?source1940ef5c/image gender2/gender job4/job /emp /emps7.pom.xml中加上下面的依赖来解析XMLdependency groupIdorg.dom4j/groupId artifactIddom4j/artifactId version2.1.3/version /dependency三、重要说明一开始直接使用资源实例代码运行是失败的原因大致为idea控制台的错误信息里显示了FileNotFoundException这表明程序在尝试访问指定路径下的emp.xml文件时该文件并不存在。问题出在EmpController类的list方法中代码尝试通过getResource(emp.xml).getFile()获取文件的绝对路径然而这种做法在某些情形下像打包成 JAR 文件后可能会失效。解决办法为采用InputStream来读取emp.xml文件这样就能避免文件路径的问题。修改代码部分为1. 修改XmlParserUtils类要让parse方法接收InputStream而不是文件路径。标注第 10 行将方法参数String file修改为InputStream inputStream。第 18 行将saxReader.read(new File(file));修改为saxReader.read(inputStream);2.修改EmpController类使用InputStream来读取emp.xml文件。标注第 18 行将String file this.getClass().getClassLoader().getResource(emp.xml).getFile();修改为InputStream inputStream this.getClass().getClassLoader().getResourceAsStream(emp.xml);数据显示的问题解决后出现新的问题表格内容的图片无法显示加载失败。原因为示例代码中的图片链接已失效重新更换新的图片链接即可。四、运行结果1.网页响应效果2.APIfox接口测试

相关新闻

如何用Continue开源AI编程助手提升3倍编码效率:新手完整指南

如何用Continue开源AI编程助手提升3倍编码效率:新手完整指南

如何用Continue开源AI编程助手提升3倍编码效率:新手完整指南 【免费下载链接】continue open-source coding agent 项目地址: https://gitcode.com/GitHub_Trending/co/continue Continue是一款开源的AI编程助手,它能够智能理解你的代码上下文&am…

2026/8/1 21:03:07阅读更多 →
告别手速焦虑:3步搭建Python大麦网自动抢票脚本完整指南

告别手速焦虑:3步搭建Python大麦网自动抢票脚本完整指南

告别手速焦虑:3步搭建Python大麦网自动抢票脚本完整指南 【免费下载链接】Automatic_ticket_purchase 大麦网抢票脚本 项目地址: https://gitcode.com/GitHub_Trending/au/Automatic_ticket_purchase 还在为抢不到热门演唱会门票而烦恼吗?每次开票…

2026/8/1 21:03:07阅读更多 →
rdclientax.dll问题

rdclientax.dll问题

解决方案:修改 WSL 配置文件这个方法直接关闭 WSL 2 中引起这个弹窗的图形界面功能。找到或创建配置文件:在Windows资源管理器的地址栏输入 %UserProfile% 并回车,在打开的文件夹里找到名为 .wslconfig 的文件。如果没有,就新建一…

2026/8/1 21:01:06阅读更多 →
多模态AI工具集成:从API调用到工作流压缩的技术实践

多模态AI工具集成:从API调用到工作流压缩的技术实践

# 多模态AI工具集成:从API调用到工作流压缩的技术实践## 背景:当“多模态”成为工程现实2026年,多模态AI市场已从2025年的25亿美元增长至33%的复合年增长率,但真正驱动企业采用的根本原因并非模型能力的“野蛮生长”。根据业界数据…

2026/8/2 1:53:20阅读更多 →
AI标准化:从技术混乱到产业协同的关键基础设施

AI标准化:从技术混乱到产业协同的关键基础设施

1. 项目概述:从标准到产业,一场静水深流的变革最近几年,AI的热度几乎要溢出屏幕,从大语言模型的全民狂欢,到AIGC应用的遍地开花,大家讨论的焦点往往是哪个模型参数更大、哪个应用又出了爆款。但在我和不少一…

2026/8/2 1:53:20阅读更多 →
Windows Phone模拟器WPR Alpha部署与XAP应用运行实战指南

Windows Phone模拟器WPR Alpha部署与XAP应用运行实战指南

1. 项目缘起:为何在今天还要折腾Windows Phone模拟器?如果你是一位移动应用开发者,或者对移动操作系统历史有浓厚兴趣的爱好者,那么“Windows Phone”这个名字一定不会陌生。这个由微软倾力打造,却最终在移动市场浪潮中…

2026/8/2 1:53:20阅读更多 →
如何免费提升网盘下载速度:9大平台直链解析工具完全指南

如何免费提升网盘下载速度:9大平台直链解析工具完全指南

如何免费提升网盘下载速度:9大平台直链解析工具完全指南 【免费下载链接】Online-disk-direct-link-download-assistant 一个基于 JavaScript 的网盘文件下载地址获取工具。基于【网盘直链下载助手】修改 ,支持 百度网盘 / 阿里云盘 / 中国移动云盘 / 天…

2026/8/2 1:53:20阅读更多 →
【WebFlux】第八篇 —— 自定义调度器

【WebFlux】第八篇 —— 自定义调度器

Flux / Mono 自定义线程调度 线程调度主要讲(Schedulers / publishOn / subscribeOn)前置:你已经学过 handle、generate、create、buffer、limitRate、doOnXXX、onXxx、Sinks。 本文聚焦「响应式代码跑在哪些线程上」——这是把响应式程序从「…

2026/8/2 1:53:20阅读更多 →
【Bug已解决】UlyssesSPAttentionHF with PEFT model 解决方案

【Bug已解决】UlyssesSPAttentionHF with PEFT model 解决方案

【Bug已解决】UlyssesSPAttentionHF with PEFT model 解决方案 一、现象长什么样 想把 Ulysses 序列并行(UlyssesSPAttentionHF)和 PEFT(LoRA)结合起来:用 Ulysses 把长序列沿序列维切到多卡,用 LoRA 做参数…

2026/8/2 1:51:19阅读更多 →
MATLAB xcorr函数详解:从互相关原理到四大实战应用

MATLAB xcorr函数详解:从互相关原理到四大实战应用

1. 从一次信号“找茬”说起:为什么我们需要互相关几年前,我在处理一组声学传感器数据时遇到了一个棘手的问题。我有两个麦克风记录了一段相同的音频信号,理论上它们接收到的声音波形应该非常相似,只是由于麦克风位置不同&#xff…

2026/8/2 0:00:10阅读更多 →
限时公开!某头部SaaS公司内部AI模板工厂架构文档(含5类行业模板源码+性能压测报告)

限时公开!某头部SaaS公司内部AI模板工厂架构文档(含5类行业模板源码+性能压测报告)

更多请点击: https://intelliparadigm.com 第一章:AI模板批量生成的核心价值与落地全景 AI模板批量生成正从实验性工具演进为现代软件工程的关键基础设施。它通过语义理解、上下文感知与结构化约束,将重复性高、模式明确的代码/文档/配置生成…

2026/8/2 0:00:12阅读更多 →
如何快速找回消失的网页:Web Archives浏览器扩展终极指南

如何快速找回消失的网页:Web Archives浏览器扩展终极指南

如何快速找回消失的网页:Web Archives浏览器扩展终极指南 【免费下载链接】web-archives Browser extension for viewing archived and cached versions of web pages, available for Chrome, Edge and Safari 项目地址: https://gitcode.com/gh_mirrors/we/web-a…

2026/8/2 0:00:13阅读更多 →
MATLAB xcorr函数详解:从互相关原理到四大实战应用

MATLAB xcorr函数详解:从互相关原理到四大实战应用

1. 从一次信号“找茬”说起:为什么我们需要互相关几年前,我在处理一组声学传感器数据时遇到了一个棘手的问题。我有两个麦克风记录了一段相同的音频信号,理论上它们接收到的声音波形应该非常相似,只是由于麦克风位置不同&#xff…

2026/8/2 0:00:10阅读更多 →
限时公开!某头部SaaS公司内部AI模板工厂架构文档(含5类行业模板源码+性能压测报告)

限时公开!某头部SaaS公司内部AI模板工厂架构文档(含5类行业模板源码+性能压测报告)

更多请点击: https://intelliparadigm.com 第一章:AI模板批量生成的核心价值与落地全景 AI模板批量生成正从实验性工具演进为现代软件工程的关键基础设施。它通过语义理解、上下文感知与结构化约束,将重复性高、模式明确的代码/文档/配置生成…

2026/8/2 0:00:12阅读更多 →
如何快速找回消失的网页:Web Archives浏览器扩展终极指南

如何快速找回消失的网页:Web Archives浏览器扩展终极指南

如何快速找回消失的网页:Web Archives浏览器扩展终极指南 【免费下载链接】web-archives Browser extension for viewing archived and cached versions of web pages, available for Chrome, Edge and Safari 项目地址: https://gitcode.com/gh_mirrors/we/web-a…

2026/8/2 0:00:13阅读更多 →
无损视频剪辑终极指南:如何实现快速高效的多媒体处理

无损视频剪辑终极指南:如何实现快速高效的多媒体处理

无损视频剪辑终极指南:如何实现快速高效的多媒体处理 【免费下载链接】lossless-cut The swiss army knife of lossless video/audio editing 项目地址: https://gitcode.com/gh_mirrors/lo/lossless-cut 在数字媒体创作领域,视频编辑处理的质量损…

2026/8/2 1:29:34阅读更多 →
AI辅助本科论文写作:8大工具评测与高效使用指南

AI辅助本科论文写作:8大工具评测与高效使用指南

1. 本科生论文写作的AI辅助现状本科毕业论文是每个大学生必须跨越的一道坎。记得我当年写论文时,光是文献检索就花了整整两周时间,打印的参考文献堆满了半个书桌。如今AI技术的发展为学术写作带来了革命性变化,合理使用这些工具可以节省80%以…

2026/8/1 0:00:10阅读更多 →
如何快速配置大麦自动抢票系统:从零开始搭建Python抢票助手

如何快速配置大麦自动抢票系统:从零开始搭建Python抢票助手

如何快速配置大麦自动抢票系统:从零开始搭建Python抢票助手 【免费下载链接】ticket-purchase 大麦自动抢票,支持人员、城市、日期场次、价格选择 项目地址: https://gitcode.com/GitHub_Trending/ti/ticket-purchase 还在为抢不到热门演唱会门票…

2026/8/1 0:00:10阅读更多 →