SpringMVC-RestFul案例

前提: 1.准备实体类:

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() {
    }
}

2.准备dao模拟数据

@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", "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));
    }
    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);
    }
}

案例功能:

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

具体功能

1.访问首页

  • 配置view-controller

    <mvc:view-controller path="/" view-name="index"/>
    
  • 创建页面

    <!DOCTYPE html>
    
访问员工信息 ```

查询所有员工数据

  • 控制器方法

    @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>
    
```

删除

  • 创建处理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";
    }
    

执行保存

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

本文章使用limfx的vscode插件快速发布