SpringMVC框架——集成RESTful架构

REST:Representational State Transfer 资源表现层状态转换

  Resources  资源

  Representation  资源表现层

  State Transfer  状态转换

RESTful的特点:

  • URL传参更加简洁

    传统的URL:http://localhost:7777/test?id=1

    RESTful:http://localhost:7777/test/1

  • 完成不同终端之间的资源共享,RESTful提供了一套规范,不同终端之间只需要遵守该规范,就可以实现数据的交互。

RESTful具体来讲就是4种表现形式,HTTP协议中的四种请求类型(GET、POST、PUT、DELETE)分别对应四种常规操作,CRUD。

  GET  用来获取资源

  POST  用来创建资源

  PUT  用来修改资源

扫描二维码关注公众号,回复: 9947732 查看本文章

  DELETE用来删除资源

  • 由于form表单不支持PUT、DELETE请求,需要想办法支持。SpringMVC通过添加过滤器的方式来完成这种处理的。

实现原理 及 示例:

  检测请求参数中是否包含 _method 参数,如果包含则获取该参数的值,判断是哪种操作后完成请求类型的转换,然后继续传递。
  1、在 form 表单中添加隐藏域标签, name="_method"value="PUT"/"DELETE"
  2、在web.xml文件中配置HiddenHttpMethodFilter

  <!-- put/delete请求转换 -->
  <filter>
    <filter-name>HiddenHttpMethodFilter</filter-name>
    <filter-class>org.springframework.web.filter.HiddenHttpMethodFilter</filter-class>
  </filter>
  <filter-mapping>
    <filter-name>HiddenHttpMethodFilter</filter-name>
    <url-pattern>/*</url-pattern>
  </filter-mapping>

  3、编写Controller

package com.sunjian.controller;

import com.sunjian.entity.User;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.servlet.ModelAndView;

/**
 * @author sunjian
 * @date 2020/3/19 8:13
 */
@Controller
@RequestMapping("/rest")
public class RESTController {

    @RequestMapping("/get/{id}")
    @ResponseBody
    public String get(@PathVariable("id") int num){
        System.out.println("GET");
        if(num < 100){
            return "OK";
        }else
            return "没有这个编号的数据";
    }

    @RequestMapping(value = "/post", method = RequestMethod.POST)
    public ModelAndView post(){
        User user = new User();
        user.setId(123);
        user.setName("post");
        user.setAge(55);
        ModelAndView modelAndView = new ModelAndView();
        modelAndView.addObject("user", user);
        modelAndView.setViewName("show");
        return modelAndView;
    }

    @RequestMapping(value = "/put", method = RequestMethod.PUT)
    @ResponseBody // 返回json格式
    public String put(){
        System.out.println("put");
        return "put";
    }

    @RequestMapping(value = "/delete", method = RequestMethod.DELETE)
    @ResponseBody
    public String delete(){
        System.out.println("delete");
        return "delete";
    }
}

  4、编写JSP页面

  rest.jsp

<%@page contentType="text/html; charset=UTF-8" language="java" %>
<%@page isELIgnored="false" %> <!-- 是否忽略解析el表达式 -->
<html>
<body>
<form action="/rest/put" method="POST">
    <input type="hidden" name="_method" value="PUT">
    <input type="submit" value="PUT">
</form>
<hr>
<form action="/rest/delete" method="POST">
    <input type="hidden" name="_method" value="DELETE">
    <input type="submit" value="DELETE">
</form>
<hr>
<form action="/rest/get/1" method="GET">
    <input type="submit" value="GET">
</form>
<hr>
<form action="/rest/post" method="POST">
    <input type="submit" value="POST">
</form>
</body>
</html>

  show.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ page isELIgnored="false" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
${user}
</body>
</html>

  5、访问jsp页面,提交请求

   

   

   

   

   

OK.

  

      

  

猜你喜欢

转载自www.cnblogs.com/zuichao123/p/12522142.html