首页 > 其他分享 >8. RESTful案例

8. RESTful案例

时间:2023-06-20 17:48:55浏览次数:44  
标签:String Employee public 案例 employee Integer RESTful id

1. 准备工作

和传统 CRUD 一样,实现对员工信息的增删改查。

  • 搭建环境
  • 准备实体类
package com.atguigu.mvc.bean;
public class Employee {
    private Integer id;
    private String lastName;
    private String email;
    //1 male, 0 female
    private Integer gender;
    public Integer getId() {
        return id;
    }
    public void setId(Integer id) {
        this.id = id;
    }
    public String getLastName() {
        return lastName;
    }
    public void setLastName(String lastName) {
        this.lastName = lastName;
    }
    public String getEmail() {
        return email;
    }
    public void setEmail(String email) {
        this.email = email;
    }
    public Integer getGender() {
        return gender;
    }
    public void setGender(Integer gender) {
        this.gender = gender;
    }
    public Employee(Integer id, String lastName, String email, Integergender) {
        super();
        this.id = id;
        this.lastName = lastName;
        this.email = email;
        this.gender = gender;
    }
    public Employee() {
    }
}
  • 准备dao模拟数据
package com.atguigu.mvc.dao;
import java.util.Collection;
import java.util.HashMap;
import java.util.Map;
import com.atguigu.mvc.bean.Employee;
import org.springframework.stereotype.Repository;
@Repository
public class EmployeeDao {
    private static Map<Integer, Employee> employees = null;
    static{
        employees = new HashMap<Integer, Employee>();
        employees.put(1001, new Employee(1001, "E-AA", "[email protected]", 1));
        employees.put(1002, new Employee(1002, "E-BB", "[email protected]", 1));
        employees.put(1003, new Employee(1003, "E-CC", "[email protected]", 0));
        employees.put(1004, new Employee(1004, "E-DD", "[email protected]", 0));
        employees.put(1005, new Employee(1005, "E-EE", "[email protected]", 1));
    }
    private static Integer initId = 1006;
    public void save(Employee employee){
        if(employee.getId() == null){
            employee.setId(initId++);
        }
        employees.put(employee.getId(), employee);
    }
    public Collection<Employee> getAll(){
        return employees.values();
    }
    public Employee get(Integer id){
        return employees.get(id);
    }
    public void delete(Integer id){
        employees.remove(id);
    }
}

2. 功能清单

功能 URL 地址 请求方式
访问首页√ / GET
查询全部数据√ /employee GET
删除√ /employee/2 DELETE
跳转到添加数据页面√ /toAdd GET
执行保存√ /employee POST
跳转到更新数据页面√ /employee/2 GET
执行更新√ /employee PUT

3. 具体功能:访问首页

①配置view-controller

<mvc:view-controller path="/" view-name="index"/>

②创建页面

<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
    <head>
        <meta charset="UTF-8" >
        <title>Title</title>
    </head>
    <body>
        <h1>首页</h1>
        <a th:href="@{/employee}">访问员工信息</a>
    </body>
</html>

4. 具体功能:查询所有员工数据

①控制器方法

@RequestMapping(value = "/employee", method = RequestMethod.GET)
public String getEmployeeList(Model model){
    Collection<Employee> employeeList = employeeDao.getAll();
    model.addAttribute("employeeList", employeeList);
    return "employee_list";
}

②创建employee_list.html

<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
    <head>
        <meta charset="UTF-8">
        <title>Employee Info</title>
        <script type="text/javascript" th:src="@{/static/js/vue.js}"></script>
    </head>
    <body>
        <table border="1" cellpadding="0" cellspacing="0" style="text-align:center;" id="dataTable">
            <tr>
                <th colspan="5">Employee Info</th>
            </tr>
            <tr>
                <th>id</th>
                <th>lastName</th>
                <th>email</th>
                <th>gender</th>
                <th>options(<a th:href="@{/toAdd}">add</a>)</th>
            </tr>
            <tr th:each="employee : ${employeeList}">
                <td th:text="${employee.id}"></td>
                <td th:text="${employee.lastName}"></td>
                <td th:text="${employee.email}"></td>
                <td th:text="${employee.gender}"></td>
                <td>
                    <a class="deleteA" @click="deleteEmployee"
                       th:href="@{'/employee/'+${employee.id}}">delete</a>
                    <a th:href="@{'/employee/'+${employee.id}}">update</a>
                </td>
            </tr>
        </table>
    </body>
</html>

5. 具体功能:删除

①创建处理delete请求方式的表单

<!-- 作用:通过超链接控制表单的提交,将post请求转换为delete请求 -->
<form id="delete_form" method="post">
    <!-- HiddenHttpMethodFilter要求:必须传输_method请求参数,并且值为最终的请求方式 -->
    <input type="hidden" name="_method" value="delete"/>
</form>

引入vue.js

<script type="text/javascript" th:src="@{/static/js/vue.js}"></script>

删除超链接

<a class="deleteA" @click="deleteEmployee"th:href="@{'/employee/'+${employee.id}}">delete</a>

通过vue处理点击事件

<script type="text/javascript">
    var vue = new Vue({
        el:"#dataTable",
        methods:{
            //event表示当前事件
            deleteEmployee:function (event) {
                //通过id获取表单标签
                var delete_form = document.getElementById("delete_form");
                //将触发事件的超链接的href属性为表单的action属性赋值
                delete_form.action = event.target.href;
                //提交表单
                delete_form.submit();
                //阻止超链接的默认跳转行为
                event.preventDefault();
            }
        }
    });
</script>

③控制器方法

@RequestMapping(value = "/employee/{id}", method = RequestMethod.DELETE)
public String deleteEmployee(@PathVariable("id") Integer id){
    employeeDao.delete(id);
    return "redirect:/employee";
}

6. 具体功能:跳转到添加数据页面

①配置view-controller

<mvc:view-controller path="/toAdd" view-name="employee_add"></mvc:view-controller>

②创建employee_add.html

<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
    <head>
        <meta charset="UTF-8">
        <title>Add Employee</title>
    </head>
    <body>
        <form th:action="@{/employee}" method="post">
            lastName:<input type="text" name="lastName"><br>
            email:<input type="text" name="email"><br>
            gender:<input type="radio" name="gender" value="1">male
            <input type="radio" name="gender" value="0">female<br>
            <input type="submit" value="add"><br>
        </form>
    </body>
</html>

7. 具体功能:执行保存

①控制器方法

@RequestMapping(value = "/employee", method = RequestMethod.POST)
public String addEmployee(Employee employee){
    employeeDao.save(employee);
    return "redirect:/employee";
}

8. 具体功能:跳转到更新数据页面

①修改超链接

<a th:href="@{'/employee/'+${employee.id}}">update</a>

②控制器方法

@RequestMapping(value = "/employee/{id}", method = RequestMethod.GET)
public String getEmployeeById(@PathVariable("id") Integer id, Model model){
    Employee employee = employeeDao.get(id);
    model.addAttribute("employee", employee);
    return "employee_update";
}

③创建employee_update.html

<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
    <head>
        <meta charset="UTF-8">
        <title>Update Employee</title>
    </head>
    <body>
        <form th:action="@{/employee}" method="post">
            <input type="hidden" name="_method" value="put">
            <input type="hidden" name="id" th:value="${employee.id}">
            lastName:<input type="text" name="lastName" th:value="${employee.lastName}">
            <br>
            email:<input type="text" name="email" th:value="${employee.email}"><br>
            <!--
                th:field="${employee.gender}"可用于单选框或复选框的回显
                若单选框的value和employee.gender的值一致,则添加checked="checked"属性
            -->
            gender:<input type="radio" name="gender" value="1"th:field="${employee.gender}">male
            <input type="radio" name="gender" value="0"th:field="${employee.gender}">female<br>
            <input type="submit" value="update"><br>
        </form>
    </body>
</html>

9. 具体功能:执行更新

①控制器方法

@RequestMapping(value = "/employee", method = RequestMethod.PUT)
public String updateEmployee(Employee employee){
    employeeDao.save(employee);
    return "redirect:/employee";
}

标签:String,Employee,public,案例,employee,Integer,RESTful,id
From: https://www.cnblogs.com/NorthPoet/p/17494273.html

相关文章

  • C++小案例之音乐播放器
    Common.h:点击查看代码#pragmaonce#include<iostream>#include<string>#include<vector>#include<stdio.h>#include<stdlib.h>#include<graphics.h>#include<list>#include<time.h>#include<map>#include<m......
  • 7. RESTful
    1.RESTful简介‍REST:RepresentationalStateTransfer,表现层资源状态转移。①资源‍资源是一种看待服务器的方式,即,将服务器看作是由很多离散的资源组成。每个资源是服务器上一个可命名的抽象概念。因为资源是一个抽象的概念,所以它不仅仅能代表服务器文件系统中的一个文件、......
  • 【数据库数据恢复】SQL Server数据库底层File Record被截断为0,无法读取的数据恢复案例
    数据库故障&分析:SQLserver数据库数据无法读取。经过初检,发现SQLserver数据库文件无法被读取的原因是因为底层FileRecord被截断为0,无法找到文件开头,数据表结构损坏。镜像文件的前面几十M空间和中间一部分空间被覆盖掉,系统表损坏,无法读取。考虑用自动备份文件来提取表结构。日......
  • 学习抽象概念案例,虚数和复数
    从哲学角度思考虚拟的东西有必要吗?人类可能是唯一一个能够构想出不存在的事物的物种,这个能力对我们来讲非常重要。说实话,虚数其实不好理解,因为这个数是之前的数学家虚构、想象出来的。那么这种虚构的数一定是抽象的,就像我们说的负数,你就很难说它存在或者不存在,当你说“我有-1个......
  • 三菱FX3U与4台三菱变频器专用指令通讯案例 功能:采用三菱FX3U PLC与4台三菱变频器E740
    三菱FX3U与4台三菱变频器专用指令通讯案例功能:采用三菱FX3UPLC与4台三菱变频器E740进行通讯。配件:三菱FX3U的PLC,加FX3U485BD板。三菱E740变频器。昆仑通态触摸屏方式:采用三菱变频器专用通讯指令。效果:控制4台变频器启停,加减速时间设定,频率,电流,电压读取三菱FX3U与四台三菱变频器......
  • 信捷XC PLC与7台海利普变频器 通讯程序案例可直接拿来实用了,信捷XC系列PLC与7台海利普
    信捷XCPLC与7台海利普变频器通讯程序案例可直接拿来实用了,信捷XC系列PLC与7台海利普变频器通讯采用器件:信捷XC系列PLC,多7台海利普HLPB系列变频器,1块昆仑通态MCGS触摸屏。通讯方式:用自由通讯模式方式。特别针对那些老款的变频器功能:对变频器进行频率设定,控制启停,读取输出频率。......
  • 欧姆龙CP1H与三菱变频器通讯 CIF01(232串口方式)可直接拿来实用了,欧姆龙CP1H 与变频器
    欧姆龙CP1H与三菱变频器通讯CIF01(232串口方式)可直接拿来实用了,欧姆龙CP1H与变频器modbus通讯案例采用的器件:欧姆龙CP1HPLC,2个CP1WCIF01(232串口单元),RS232转RS485转换器,三菱FR-E740变频器进行modbusRTU模式通讯。接线方式:PLC的两个串口单元CIF01,一个接MCGS触摸屏,一个接RS23......
  • 基于振弦传感器的岩土工程在线监测系统案例
    基于振弦传感器的岩土工程在线监测系统案例随着科技的不断进步,越来越多的新型监测设备被应用到岩土工程中,振弦传感器和振弦采集仪及在线监测系统就是其中一种。这一系统能够有效地对岩土体的振动参数进行实时监测,为岩土工程的安全性评估提供了重要的数据支持。 在一个挖掘深......
  • 基于振弦传感器的岩土工程在线监测系统案例
    基于振弦传感器的岩土工程在线监测系统案例随着科技的不断进步,越来越多的新型监测设备被应用到岩土工程中,振弦传感器和振弦采集仪及在线监测系统就是其中一种。这一系统能够有效地对岩土体的振动参数进行实时监测,为岩土工程的安全性评估提供了重要的数据支持。在一个挖掘深度较浅......
  • collection案例
    需求:某影院系统需要在后台存储上述三部电影,然后依次展示出来分析:定义一个电影类,定义一个集合存储对象。创建3个电影对象,封装相关数据,把3个对象存入到集合中去。遍历集合中的3个对象,输出相关信息。Test类packagecom.itheima.d4_collection_object;importjava.ut......