SpringBootWeb响应

📅 2026/8/1 21:02:58
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接口测试