Spring MVC-RESTful案例


目录
  • 什么是RESTful
  • 环境
  • 准备工作
  • 案例
    • 查询所有员工
    • 根据id删除员工
      • 引入vue.js
      • 代码
    • 添加
    • 修改

什么是RESTful

RESTFUL是一种网络应用程序的设计风格和开发方式,基于HTTP,可以使用XML格式定义或JSON格式定义。RESTFUL适用于移动互联网厂商作为业务接口的场景,实现第三方OTT调用移动网络资源的功能,动作类型为新增、变更、删除所调用资源。

环境


        
        
            org.springframework
            spring-webmvc
            5.3.1
        
        
        
            ch.qos.logback
            logback-classic
            1.2.3
        
        
        
            javax.servlet
            javax.servlet-api
            3.1.0
            provided
        
        
        
            org.thymeleaf
            thymeleaf-spring5
            3.0.12.RELEASE
        
    
<?xml version="1.0" encoding="UTF-8"?>


    
    
    

    
    
        
        
        
            
                
                    
                        
                        
                        
                        
                        
                        
                    
                
            
        
    

    

    
    


<?xml version="1.0" encoding="UTF-8"?>


    
    
    
        CharacterEncodingFilter
        org.springframework.web.filter.CharacterEncodingFilter
        
            encoding
            UTF-8
        
        
            forceResponseEncoding
            true
        
    
    
    
        CharacterEncodingFilter
        /*
    
    
    
    
        DispatcherServlet
        org.springframework.web.servlet.DispatcherServlet
        
            contextConfigLocation
            classpath:springMVC.xml
        
        1
    
    
    
        DispatcherServlet
        /
    


准备工作

package com.fly.entity;

/**
 * @author 26414
 */
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, Integer gender) {
    super();
    this.id = id;
    this.lastName = lastName;
    this.email = email;
    this.gender = gender;
  }

  public Employee() {
  }
}

package com.fly.mapper;

import com.fly.entity.Employee;
import org.springframework.stereotype.Repository;

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

/**
 * @author 26414
 */
@Repository
public class EmployeeMapper {

  private static Map employees = null;

  static{
    employees = new HashMap();

    employees.put(1001, new Employee(1001, "tom", "tom@qq.com", 1));
    employees.put(1002, new Employee(1002, "lucy", "lucy@qq.com", 1));
    employees.put(1003, new Employee(1003, "lili", "lili@qq.com", 0));
    employees.put(1004, new Employee(1004, "张三", "zhangsan@qq.com", 0));
    employees.put(1005, new Employee(1005, "李四", "lisi@qq.com", 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 getAll(){
    return employees.values();
  }

  public Employee get(Integer id){
    return employees.get(id);
  }

  public void delete(Integer id){
    employees.remove(id);
  }
}

案例

查询所有员工

package com.fly.controller;

import com.fly.entity.Employee;
import com.fly.mapper.EmployeeMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import java.util.Collection;

/**
 * @author 26414
 */
@Controller
public class EmployeeController {

  
  private final EmployeeMapper employeeMapper;
  
  @Autowired
  public EmployeeController(EmployeeMapper employeeMapper) {
    this.employeeMapper = employeeMapper;
  }


  @GetMapping("/employee")
  public String getAll(Model model) {
    Collection employees = employeeMapper.getAll();
    model.addAttribute("employees",employees);
    return "employee_list";
  }

}




    
    首页



查询所有员工





    
    员工列表



id 姓名 email 性别 options(add)
删除 修改

根据id删除员工

HiddenHttpMethodFilter

由于form表单只支持get和post的提交方式,可以使用Spring MVC提供的HiddenHttpMethodFilter


由上面的代码可以得知form表单的提交方式为"POST",在设置一个属性为'_method',值为PUT或者DELETE即可.
由于HiddenHttpMethodFilter获取了'_method'属性的值,所以HiddenHttpMethodFilter设置要放在编码过滤器的后面!!!

 
    
        HiddenHttpMethodFilter
        org.springframework.web.filter.HiddenHttpMethodFilter
    

    
        HiddenHttpMethodFilter
        /*
    

引入vue.js

引入vue.js后将项目打包一下,由于前端控制器和默认的servert处理冲突,以 前端控制器 为准,但是前端控制器处理不了静态资源的请求,所以在Spring MVC的配置文件开放对静态资源的访问

 
    

代码

修改employee_list.html


  /**
   *EmployeeController
   */
  @DeleteMapping("/employee/{id}")
  public String deleteEmployeeById(@PathVariable("id") Integer id) {
    employeeMapper.delete(id);
    return "redirect:/employee";
  }

添加


        options(add

    



    
    添加员工



姓名:
email:
性别:

  /**
   *EmployeeController
   */
  @PostMapping("/employee")
  public String addEmployee(Employee employee) {
    employeeMapper.save(employee);
    return "redirect:/employee";
  }

修改


            修改
  /**
   *EmployeeController
   */
  @GetMapping("/employee/{id}")
  public String getEmployeeById(@PathVariable("id") Integer id,Model model) {
    Employee employee = employeeMapper.get(id);
    model.addAttribute("employee",employee);
    return "employee_update";
  }



    
    修改



姓名:
email:
性别:

 /**
   *EmployeeController
   */
  @PutMapping("/employee")
  public String updateEmployee(Employee employee) {
    employeeMapper.save(employee);
    return "redirect:/employee";
  }