请求响应-响应-案例

news2024/11/26 13:45:29

案例需求

加载并解析emp.xml文件中的数据,完成数据处理,并在页面展示

emp.xml文件代码如下:

<?xml version="1.0" encoding="UTF-8" ?>
<emps>
    <emp>
        <name>金毛狮王</name>
        <age>55</age>
        <image>https://web-framework.oss-cn-hangzhou.aliyuncs.com/web/1.jpg</image>
        <!-- 1: 男, 2: 女 -->
        <gender>1</gender>
        <!-- 1: 讲师, 2: 班主任 , 3: 就业指导 -->
        <job>1</job>
    </emp>

    <emp>
        <name>白眉鹰王</name>
        <age>65</age>
        <image>https://web-framework.oss-cn-hangzhou.aliyuncs.com/web/2.jpg</image>
        <gender>1</gender>
        <job>1</job>
    </emp>

    <emp>
        <name>青翼蝠王</name>
        <age>45</age>
        <image>https://web-framework.oss-cn-hangzhou.aliyuncs.com/web/3.jpg</image>
        <gender>1</gender>
        <job>2</job>
    </emp>

    <emp>
        <name>紫衫龙王</name>
        <age>38</age>
        <image>https://web-framework.oss-cn-hangzhou.aliyuncs.com/web/4.jpg</image>
        <gender>2</gender>
        <job>3</job>
    </emp>
</emps>

步骤

  • 在pom.xml文件中引入dom4j的依赖,用于解析XML文件
  • 引入资料中提供解析XML的工具类XMLParserUtils、对应的实体类Emp、XML文件emp.xml
  • 引入资料中提供的静态文件,放在resource下的static目录下
  • 编写Controller程序,处理请求,响应数据

具体Controller类代码如下:

package com.example.Controller;

import com.example.POJO.Emp;
import com.example.POJO.Result;
import com.example.utils.XmlParserUtils;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

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();
        List<Emp> empList = XmlParserUtils.parse(file, Emp.class);
        // 2.对数据进行转换处理
        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:就业辅导
            String job = emp.getJob();
            if ("1".equals(job)) {
                emp.setJob("讲师");

            } else if ("2".equals(job)) {
                emp.setJob("班主任");
            } else if ("3".equals(job)) {
                emp.setJob("就业辅导");
            }
        });
        // 3.响应数据
        return Result.success(empList);
    }
}

基于Vue框架开发的前端框架,具体代码如下:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>员工信息</title>
</head>

<link rel="stylesheet" href="element-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 align="center">员工信息列表展示</h1>
<div id="app">
    <el-table :data="tableData" style="width: 100%" stripe border>
        <el-table-column prop="name" label="姓名" align="center" min-width="20%"></el-table-column>
        <el-table-column prop="age" label="年龄" align="center" min-width="20%"></el-table-column>
        <el-table-column label="图像" align="center" min-width="20%">
            <template slot-scope="scope">
                <el-image :src="scope.row.image" style="width: 80px; height: 50px;"></el-image>
            </template>
        </el-table-column>
        <el-table-column prop="gender" label="性别" align="center" min-width="20%"></el-table-column>
        <el-table-column prop="job" label="职位" align="center" min-width="20%"></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>
</html>

 发送请求,接收响应,具体结果如下:

以下为我对于此次案例的理解

首先用户在浏览器中发起对于前端页面的请求http://localhost:8080/emp.html ,在上述前端页面的代码可以知道,是一个基于Vue框架的前端页面,由Vue生命周期的知识可以知道写文章-CSDN创作中心

 当发送请求时,访问前端页面时,Vue对象也就会开始创建,其生命周期也就开始了。在上述前端代码中,当Vue对象完成挂载之后就会自动执行创建的  mounted()方法,在该方法中会发送一个异步请求,当请求成功后,就将获取到的数据展示到html页面中。

前端发送的请求会被后端对应的Controller类进行处理,该控制类的具体运行原理为:

对于目标的XML文件进行解析以及处理,然后将获取到的数据进行转换,具体转换规则,有具体的注解可以参考,最终转换的数据结果是一个集合,至此,数据已经完成了处理,最后返回将数据以Result类规定的格式进行返回,最终响应给前端页面。对于Result类有疑问的朋友可以参考:

写文章-CSDN创作中心

使用postman对于后端进行调试:运行结果如下:

发送请求为:http://localhost:8080/listEmp

{
    "code": 1,
    "msg": "success",
    "data": [
        {
            "name": "金毛狮王",
            "age": 55,
            "image": "https://web-framework.oss-cn-hangzhou.aliyuncs.com/web/1.jpg",
            "gender": "男",
            "job": "讲师"
        },
        {
            "name": "白眉鹰王",
            "age": 65,
            "image": "https://web-framework.oss-cn-hangzhou.aliyuncs.com/web/2.jpg",
            "gender": "男",
            "job": "讲师"
        },
        {
            "name": "青翼蝠王",
            "age": 45,
            "image": "https://web-framework.oss-cn-hangzhou.aliyuncs.com/web/3.jpg",
            "gender": "男",
            "job": "班主任"
        },
        {
            "name": "紫衫龙王",
            "age": 38,
            "image": "https://web-framework.oss-cn-hangzhou.aliyuncs.com/web/4.jpg",
            "gender": "女",
            "job": "就业辅导"
        }
    ]
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/746395.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Leangoo领歌敏捷工具标签管理上线~

在Leangoo领歌中&#xff0c;标签通常用作对任务的分类&#xff0c;或任务的优先级区分。 每创建一个看板设置一次标签&#xff0c;有点繁琐&#xff0c;现在标签管理功能上线&#xff0c;可以统一设置标签&#xff0c;统一导入标签。 标签设置步骤&#xff1a; 第一步&…

机器人xacro文件转换成urdf文件方法,并在rviz可视化

一、进入工作空间&#xff0c;source一下 cd cat_ws source devel/setup.bash二、进入xacro所在的文件夹&#xff0c;完成xacro文件到urdf文件的转换 cd src/kinova-ros/kinova_description/urdf/然后执行下面命令 rosrun xacro xacro.py two_arm_robot_example_standalone.…

注解和反射04(Java)

#拓展 获取泛型信息 反射操作泛型&#xff1a; package reflection;import java.lang.reflect.Method; import java.lang.reflect.ParameterizedType; import java.lang.reflect.Type; import java.util.List; import java.util.Map;//通过反射获取泛型 public class Test06{…

进制转换解析

进制 进制介绍 对于整数&#xff0c;有四种表示方式&#xff1a; 二进制&#xff1a;0,1 &#xff0c;满 2 进 1.以 0b 或 0B 开头。 十进制&#xff1a;0-9 &#xff0c;满 10 进 1。 八进制&#xff1a;0-7 &#xff0c;满 8 进 1. 以数字 0 开头表示。 十六进制&#xff1…

力扣题库刷题笔记42--接雨水(未通过)

1、题目如下&#xff1a; 2、个人Python代码实现&#xff08;部分用例超时&#xff09; 本地执行大概超过30S&#xff0c;力扣显示超时 3、个人Python代码思路&#xff1a; 当且仅当nums[i] < nums[i1]&#xff0c;nums[i] < nums[i-1]&#xff0c;此时nums[i]才能接到雨…

运动规划概述

运动规划概述 前端路径搜索后端轨迹生成MPD & MPC地图表示多智能体路径规划MAPF 前端路径搜索 不希望花费太多的算力和代价&#xff0c;因此通常把高维问题降成低维问题&#xff0c;先找到一条粗劣可行的低维解。 基于搜索的路径规划 图搜索问题 Dijkstra and A* 、 Jump…

第四十六章Java包(package)

在编写 Java 程序时&#xff0c;随着程序架构越来越大&#xff0c;类的个数也越来越多&#xff0c;这时就会发现管理程序中维护类名称也是一件很麻烦的事&#xff0c;尤其是一些同名问题的发生。有时&#xff0c;开发人员还可能需要将处理同一方面的问题的类放在同一个目录下&a…

python相关

1 首先下载python环境 win r 输入python 下载对应版本的环境 建议使用python3以上的版本。 2 windows环境下安装selenium 安装easy_install https://pypi.python.org/pypi/setuptools在此链接 然后python setup.py&#xff0c;看到了以下字样&#xff0c;则表明成功 这里需…

16万字市智慧人社项目建设方2023WORD

导读&#xff1a;原文《16万字市智慧人社项目建设方2023WORD》word&#xff08;获取来源见文尾&#xff09;&#xff0c;本文精选其中精华及架构部分&#xff0c;逻辑清晰、内容完整&#xff0c;为快速形成售前方案提供参考。 目 录 第 1 章 项目概述 1.1 项目名称 1.2 …

串行FLASH文件系统FatFs-移植过程

目录 串行FLASH文件系统FatFs-移植过程 准备工作及移植前说明 底层disk接口程序API配置 中间层API功能实现及常用文件操作函数使用 文件系统偏移 中文文件名和长文件名 串行FLASH文件系统FatFs-移植过程 准备工作及移植前说明 我们需要在SPI——读写串行FLASH的基础驱动程…

winform打印机控制程序记录

1.Invoke 跨线程访问 有些回调函数不能直接访问控件的属性&#xff0c;这时就需要用到这个。 用法&#xff1a; Invoke(new Action(() >{//正常代码receiveCount;tb_recvCount.Text Convert.ToString(receiveCount);}));2.控制打印机打印 2.1.绘制表格 准备一个 panel …

Redis---缓存双写一致性

目录 一、什么是缓存双写一致性呢&#xff1f; 1.1 双检加锁机制 二、数据库和缓存一致性的更新策略 2.1、先更新数据库&#xff0c;后更新缓存 2.2 、先更新缓存&#xff0c;后更新数据库 2.3、先删除缓存&#xff0c;在更新数据库 延时双删的策略&#xff1a; 2.4.先更新数…

手把手一起完成Python上位机与下位机USB通信

前言 最近在使用Python设计上位机&#xff0c;下位机是ZYNQ7000&#xff0c;两者通过USB进行数据传输。该文章是USB通信过程的踩坑记录 一、安装所需库 首先&#xff0c;安装pyusb和libusb两个库&#xff0c;命令如下&#xff1a; pip install pyusbpip install libusb如图…

CUDA笔记2

1.硬件理解 1.1对应 1.2 不一定是同时执行 例如只有13个sm,每个sm有128个core,而我们创建了1百万个threads,就要同步执行 因此&#xff0c;我们倾向于在block的x维设置为32的倍数,防止浪费warp warp id打印 #include <stdio.h> #include <stdlib.h>#include &qu…

Acwing 849. Dijkstra求最短路 I

Acwing 849. Dijkstra求最短路 I 链接:849. Dijkstra求最短路 I - AcWing题库 /*题解:dijkstra算法模板对于单源最短路径dijkstra1.每次找到当前距离源最近的节点 作为确定距离的点2.通过这个点看能否让其他的节点来松弛其他点到源的距离重复12操作*/ #include<algorithm&g…

完美解决win10系统cmd命令无法使用ssh

最近我在远程访问服务器的时候&#xff0c;在winR运行cmd的时候&#xff0c;输入ssh来获得本地和服务器映射&#xff0c;无法实现。提示&#xff1a;’SSH’ 不是内部或外部命令&#xff0c;也不是可运行的程序 或批处理文件。 下面的方法可以完美解决这个问题&#xff1a; 目…

四大运营商的优缺点,你的选择是对的吗?

随着2022年中国广电获得基础运营商服务牌照&#xff0c;中国从三大运营商变成了四大运营商&#xff1a;中国移动&#xff0c;中国联通&#xff0c;中国电信&#xff0c;中国广电。这四大运营商到底都有什么优缺点呢&#xff1f;大家一直在用的运营商手机卡&#xff0c;大家了解…

REE刷TLB时会把安全的TLB刷掉吗

思考: REE刷TLB时会把安全的TLB刷掉吗? TEE刷TLB时能否刷安全的TLB?例如页表管理着的共享内存,它的翻译缓存到了TLB. 首先,纠正一下用词,这里的"刷",来自某些操作系统中的"flush",在TLB底层的操作指令中,是没有flush或clean的,关于TLB的操作指令…

基于linux下的高并发服务器开发(第一章)- 静态库的使用1.5

1、创建lesson05文件夹&#xff0c;mkdir lesson05,然后创建子文件夹calc和library 在calc文件夹下有文件add.c&#xff0c;div.c&#xff0c;mult.c &#xff0c; sub.c &#xff0c;head.h&#xff0c;main.c在library文件夹下有文件夹include&#xff0c;lib&#xff0c;sr…

目标跟踪基础:数据关联算法

本文来自公众号“AI大道理” —————— 数据关联是多目标跟踪任务中的关键步骤&#xff0c;其目的主要是为了进行帧与帧之间的多个目标的匹配。 1、数据关联 数据关联其实就是一个沿着时间轴&#xff0c;将来自同一个物体的不同时刻的信号串联起来的过程。 数据关联通常在…