8、SpringMVC之RESTful案例

这篇具有很好参考价值的文章主要介绍了8、SpringMVC之RESTful案例。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

阅读本文前,需要先阅读SpringMVC之RESTful概述

8.1、前期工作

8.1.1、创建实体类Employee

8、SpringMVC之RESTful案例

package org.rain.pojo;

import java.io.Serializable;

/**
 * @author liaojy
 * @date 2023/10/19 - 21:31
 */
public class Employee implements Serializable {

    private Integer id;

    private String lastName;

    private String email;

    //1 male, 0 female
    private Integer gender;

    public Employee() {
    }

    public Employee(Integer id, String lastName, String email, Integer gender) {
        this.id = id;
        this.lastName = lastName;
        this.email = email;
        this.gender = 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;
    }

    @Override
    public String toString() {
        return "Employee{" +
                "id=" + id +
                ", lastName='" + lastName + '\'' +
                ", email='" + email + '\'' +
                ", gender=" + gender +
                '}';
    }
}

8.1.2、创建EmployeeDao模拟操作数据

8、SpringMVC之RESTful案例

package org.rain.dao;

import org.rain.pojo.Employee;
import org.springframework.stereotype.Repository;

import java.util.Collection;
import java.util.HashMap;
import java.util.Map;

/**
 * @author liaojy
 * @date 2023/10/19 - 21:36
 */
@Repository
public class EmployeeDao {

    // 通过map集合模拟数据库
    private static Map<Integer, Employee> employees = null;

    // 静态代码块在类加载时执行,并且只执行一次
    static{
        employees = new HashMap<Integer, Employee>();
        employees.put(1001, new Employee(1001, "E-AA", "aa@163.com", 1));
        employees.put(1002, new Employee(1002, "E-BB", "bb@163.com", 1));
        employees.put(1003, new Employee(1003, "E-CC", "cc@163.com", 0));
        employees.put(1004, new Employee(1004, "E-DD", "dd@163.com", 0));
        employees.put(1005, new Employee(1005, "E-EE", "ee@163.com", 1));
    }

    // 新数据的id
    private static Integer initId = 1006;

    // 新增或修改
    public void save(Employee employee) {
        // 参数没有id表示要执行新增操作
        if (employee.getId() == null) {
            // 设置新增数据的id,并自增id值为下一次新增数据做准备
            employee.setId(initId++);
        }
        // 更新模拟数据库的数据
        employees.put(employee.getId(), employee);
    }

    // 查询所有
    public Collection<Employee> getAll(){
        return employees.values();
    }

    // 根据id查询
    public Employee get(Integer id){
        return employees.get(id);
    }

    // 根据id删除
    public void delete(Integer id){
        employees.remove(id);
    }

}

8.1.3、调整bean组件扫描

8、SpringMVC之RESTful案例

在原来的环境中,只扫描控制层组件,现在多了持久层组件,所以要调整扫描包的范围

    <!--在指定的包中,扫描bean组件-->
    <context:component-scan base-package="org.rain"></context:component-scan>

8.1.4、功能清单

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

8.2、查询列表功能

8.2.1、页面请求示例

8、SpringMVC之RESTful案例

<a th:href="@{/employee}">查询所有员工的信息</a>

8.2.2、控制器方法示例

8、SpringMVC之RESTful案例

    @GetMapping("/employee")
    public String getAllEmployee(Model model){
        // 获取所有员工的信息
        Collection<Employee> allEmployee = employeeDao.getAll();
        // 将所有员工的信息,共享到请求域
        model.addAttribute("allEmployee",allEmployee);
        // 跳转到列表页面
        return "employee_list";
    }

8.2.3、列表页面示例

8、SpringMVC之RESTful案例

注意:在idea中,某些thymeleaf语法可能会提示错误(红色波浪线),这是误报,可以不用管

<table border="10">
    <tr>
        <!--表头合并五列-->
        <th colspan="5">employee list</th>
    </tr>
    <tr>
        <th>id</th>
        <th>lastName</th>
        <th>email</th>
        <th>gender</th>
        <th>options</th>
    </tr>
    <!--在thymeleaf语法中,要循环一个标签,只需要在该标签中添加循环属性即可-->
    <tr th:each="employee : ${allEmployee}">
        <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 href="">update</a>
            <a href="">delete</a>
        </td>
    </tr>
</table>

8.2.4、测试效果

8、SpringMVC之RESTful案例

8、SpringMVC之RESTful案例

8.3、新增功能

8.3.1、页面请求示例

8、SpringMVC之RESTful案例

<th>options(<a th:href="@{/to/add}">add</a>)</th>

8.3.2、视图控制器示例

8、SpringMVC之RESTful案例

因为只需要实现页面跳转,没有处理业务的过程,所以可以使用视图控制器实现

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

8.3.3、新增页面示例

8、SpringMVC之RESTful案例

<form th:action="@{/employee}" method="post">
    <!--因为table标签中的子标签是固定的,所以要用form标签包含table标签-->
    <table border="10">
        <tr>
            <th colspan="2">employee add</th>
        </tr>
        <tr>
            <td>lastName</td>
            <td> <input type="text" name="lastName"> </td>
        </tr>
        <tr>
            <td>email</td>
            <td> <input type="text" name="email"> </td>
        </tr>
        <tr>
            <td>gender</td>
            <td>
                <input type="radio" name="gender" value="1">male
                <input type="radio" name="gender" value="0">female
            </td>
        </tr>
        <tr>
            <td colspan="2"> <input type="submit" value="add"> </td>
        </tr>
    </table>
</form>

8.3.4、控制器方法示例

8、SpringMVC之RESTful案例

注意:直接跳转到列表页面会显示不了数据,因为还没向请求域共享数据,所以需要先跳转到查询列表功能

此外,跳转要用重定向,而不是用请求转发;

如果用请求转发,因为源请求的请求方式是post,所以请求转发后的请求方式还会是post,这样就会一直重复调用insertEmployee方法,直至内存耗尽;

如果用重定向,因为重定向的请求方式肯定是get,所以会调用getAllEmployee方法,从而实现查询列表功能

    @PostMapping("/employee")
    public String insertEmployee(Employee employee){
        // 新增员工
        employeeDao.save(employee);
        // 重定向到查询列表功能
        return "redirect:/employee";
    }

8.3.5、测试效果

8、SpringMVC之RESTful案例

8、SpringMVC之RESTful案例

8、SpringMVC之RESTful案例

8、SpringMVC之RESTful案例

8.4、修改功能

8.4.1、页面请求示例

8、SpringMVC之RESTful案例

注意:因为员工id是变量,所以(在thymeleaf语法中)路径要使用单引号后再使用加号拼接变量

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

8.4.2、控制器方法示例(回显数据)

8、SpringMVC之RESTful案例

    @GetMapping("/to/update/{id}")
    public String toUpdate(@PathVariable("id") Integer id, Model model){
        // 根据id查询员工信息
        Employee employee = employeeDao.get(id);
        // 将员工信息共享到请求域
        model.addAttribute("employee",employee);
        // 跳转到更新页面
        return "employee_update";
    }

8.4.3、更新页面示例

8、SpringMVC之RESTful案例

注意:请求方式和id用了隐藏域;
单选框的回显,用了th:field的属性,如果其值和value属性的值相等,则选中当前单选框

<form th:action="@{/employee}" method="post">
    <input type="hidden" name="_method" value="put">
    <input type="hidden" name="id" th:value="${employee.id}">
    <table border="10">
        <tr>
            <th colspan="2">employee update</th>
        </tr>
        <tr>
            <td>lastName</td>
            <td> <input type="text" name="lastName" th:value="${employee.lastName}"> </td>
        </tr>
        <tr>
            <td>email</td>
            <td> <input type="text" name="email" th:value="${employee.email}"> </td>
        </tr>
        <tr>
            <td>gender</td>
            <td>
                <input type="radio" name="gender" value="1" th:field="${employee.gender}">male
                <input type="radio" name="gender" value="0" th:field="${employee.gender}">female
            </td>
        </tr>
        <tr>
            <td colspan="2"> <input type="submit" value="update"> </td>
        </tr>
    </table>
</form>

8.4.4、控制器方法示例(执行修改)

8、SpringMVC之RESTful案例

    @PutMapping("/employee")
    public String updateEmployee(Employee employee){
        // 修改员工
        employeeDao.save(employee);
        // 重定向到查询列表功能
        return "redirect:/employee";
    }

8.4.5、测试效果

8、SpringMVC之RESTful案例

8、SpringMVC之RESTful案例

8、SpringMVC之RESTful案例

8、SpringMVC之RESTful案例

8.5、删除功能

8.5.1、页面请求示例

8、SpringMVC之RESTful案例

<a onclick="put()" th:href="@{'/employee/'+${employee.id}}">delete</a>
<form method="post">
    <input type="hidden" name="_method" value="delete">
</form>
<script type="text/javascript">
    function put() {
        // 获取form表单
        var form = document.getElementsByTagName("form")[0]
        // 将超链接的href属性值赋值给form表单的action属性
        // event.target表示当前触发事件的标签
        form.action = event.target.href;
        // 提交表单
        form.submit();
        // 阻止超链接的默认行为(跳转)
        event.preventDefault();
    }
</script>

8.5.2、控制器方法示例

8、SpringMVC之RESTful案例

    @DeleteMapping("/employee/{id}")
    public String deleteEmployee(@PathVariable("id") Integer id){
        // 删除员工
        employeeDao.delete(id);
        // 重定向到查询列表功能
        return "redirect:/employee";
    }

8.5.3、测试效果

8、SpringMVC之RESTful案例

8、SpringMVC之RESTful案例文章来源地址https://www.toymoban.com/news/detail-711443.html

到了这里,关于8、SpringMVC之RESTful案例的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • SpringMVC - 详解RESTful

    REST全称是Representational State Transfer,中文意思是表述(编者注:通常译为表征)性状态转移。 它首次出现在2000年Roy Fielding的博士论文中,Roy Fielding是HTTP规范的主要编写者之一。 他在论文中提到:“我这篇文章的写作目的,就是想在符合架构原理的前提下,理解和评估以网络

    2024年02月08日
    浏览(28)
  • SpringMVC(六)RESTful

    REST:Representational State Transfer,表现层资源状态转移 (1)资源 资源是一种看待服务器的方式,即,将服务器看作是由很多离散的资源组成。每个资源是服务器上一个可命名的抽象概念。因为资源是一个抽象的概念,所以它不仅仅能代表服务器文件系统中的一个文件、数据库中的一

    2024年01月17日
    浏览(26)
  • SpringMVC-Restful风格

    rest: 表现层(视图view及控制层controller)资源状态转移 具体说就是http协议里面,四个表示操作方式的动词: GET POST PUT DELETE 它们分别对应四种基本操作: GET 用来表示获取资源, POST用来新建资源, PUT用来更新资源,DELETE 用来删除资源. REST风格提倡URL地址使用统一的风格设计,从前到后各

    2024年01月16日
    浏览(32)
  • 7、SpringMVC之RESTful概述

    创建名为spring_mvc_rest的新module,过程参考5.2节和6.6节 RESTful 也称为REST(英文:Representational State Transfer)即表现层状态传递,它是一种软件架构风格或设计风格; REST 是 Roy Fielding 博士( HTTP 规范的主要编写者之一)在其2000年的博士论文中提出来的; 其作用是,降低开发的复

    2024年02月08日
    浏览(27)
  • SpringMVC | SpringMVC中的 “JSON数据交互“ 和 “RESTful设计风格“

    作者简介 :一只大皮卡丘,计算机专业学生,正在努力学习、努力敲代码中! 让我们一起继续努力学习! 该文章 参考学习教材 为: 《Java EE企业级应用开发教程 (Spring + Spring MVC +MyBatis)》 黑马程序员 / 编著 文章以课本知识点 + 代码为主线,结合自己看书学习过程中的理解和

    2024年04月10日
    浏览(35)
  • SpringMVC-RESTful架构风格

    目录 RESTful架构风格 1、RESTful概述 2、RESTful的六大原则 3、RESTful的实现 4、HiddenHttpMethodFilter RESTful风格的CRUD 1、环境搭建 2、功能需求 3、功能:访问首页 4、功能:查询所有数据 5、功能:删除一条数据 6、功能:添加一条数据 SpringMVC处理静态资源 1、tomcat自己的web.xml 2、关于

    2024年02月01日
    浏览(62)
  • SpringMVC第八阶段:Restful风格

    Restful 一种软件架构风格、设计风格,而不是标准,只是提供了一组设计原则和约束条件。它主要用于客户端和服务器交互类的软件。基于这个风格设计的软件可以更简洁,更有层次,更易于实现缓存等机制。 REST(英文:Representational State Transfer,简称REST)描述了一个架构样

    2024年02月08日
    浏览(28)
  • 【SpringMVC】RESTful风格CRUD实现

    目录 一、REST简介 1.1 什么是REST? 1.2 REST风格的优点 1.3 请求方式   二、构建项目 ⭐思路分析 2.1 环境准备 2.1.1 导入相关pom依赖 2.1.2 jdbc.properties:配置文件 2.1.3 配置代码生成器 generatorConfig.xml 2.1.4 spring与mybatis整合的配置文件 spring-mybatis.xml   2.1.5 spring-context.xml 上下文配

    2024年02月09日
    浏览(29)
  • 【SpringMVC篇】讲解RESTful相关知识

    🎊专栏【SpringMVC】 🍔喜欢的诗句:天行健,君子以自强不息。 🎆音乐分享【如愿】 🎄欢迎并且感谢大家指出小吉的问题🥰 RESTful架构风格近年来备受关注,它倡导一种简洁统一的接口设计理念,使接口更加直观易用。那么如何使用Spring MVC来开发RESTful接口呢?本文将为大家详

    2024年02月06日
    浏览(32)
  • SpringMVC原理分析 | Controller配置、RestFul风格

    💗wei_shuo的个人主页 💫wei_shuo的学习社区 🌐Hello World ! 控制器Controller 控制器复杂提供访问应用程序的行为,通常通过 接口定义 或 注释定义 的两种方法实现 控制器负责解析用户的请求并将其转换为一个模型 SpringMVC中一个控制器可以包含多个方法 实现Controller接口 Contro

    2024年02月11日
    浏览(29)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包