【SpringMVC 从 0 开始】RESTFul 介绍

简介: 【SpringMVC 从 0 开始】RESTFul 介绍

一、RESTful 简介


REST 是一种软件架构风格。


REST:Representational State Transfer,表现层资源状态转移。


对此,有几个名字需要理解一下:


  • 表现层:实际上就是前端的页面到后端的控制层。


  • 资源:当应用部署到服务器上之后,万物皆资源,比如一个类、一个html页面等等。


1-资源是一种看待服务器的方式,即将服务器看作是由很多离散的资源组成。每个资源是服务器上一个可命名的抽象概念。
2-因为资源是一个抽象的概念,所以它不仅仅能代表服务器文件系统中的一个文件、数据库中的一张表等等具体的东西,可以将资源设计的要多抽象有多抽象,只要想象力允许而且客户端应用开发者能够理解。
3-与面向对象设计类似,资源是以名词为核心来组织的,首先关注的是名词。
4-一个资源可以由一个或多个URI来标识。
5-URI既是资源的名称,也是资源在Web上的地址。
6-对某个资源感兴趣的客户端应用,可以通过资源的URI与其进行交互。


  • 资源的表述:是一段对于资源在某个特定时刻的状态的描述。


1-可以在客户端-服务器端之间转移(交换)。
2-资源的表述可以有多种格式,例如HTML/XML/JSON/纯文本/图片/视频/音频等等。
3-资源的表述格式可以通过协商机制来确定。
4-请求-响应方向的表述通常使用不同的格式。


  • 状态转移:在客户端和服务器端之间转移(transfer)代表资源状态的表述。通过转移和操作资源的表述,来间接实现操作资源的目的。


二、RESTful 的实现


具体说,就是 HTTP 协议里面,四个表示操作方式的动词:GET、POST、PUT、DELETE


它们分别对应四种基本操作:


  • GET 用来获取资源
  • POST 用来新建资源
  • PUT 用来更新资源
  • DELETE 用来删除资源


REST 风格提倡 URL 地址使用统一的风格设计,从前到后各个单词使用斜杠分开。


不使用问号键值对方式携带请求参数,而是将要发送给服务器的数据作为 URL 地址的一部分,以保证整体风格的一致性。比如:


1268169-20210815221238532-1635404420.png


实践一下


使用 RESTFul 模拟一下用户资源的增删改查。


1. get 和 post 请求


控制器方法:


@Controller
public class UserController {
    /**
     * /user    GET     查询所有用户信息
     * /user/1  GET     根据用户 id 查询用户信息
     * /user    POST    添加用户信息
     * /user/1  DELETE  删除用户信息
     * /user    PUT     更新用户信息
     */
    @RequestMapping(value = "/user", method = RequestMethod.GET)
    public String getAllUser() {
        System.out.println("查询所有用户信息");
        return "success";
    }
    @RequestMapping(value = "/user/{id}", method = RequestMethod.GET)
    public String getUserById() {
        System.out.println("根据用户 id 查询用户信息");
        return "success";
    }
    @RequestMapping(value = "/user", method = RequestMethod.POST)
    public String addUser(String username, String password) {
        System.out.println("添加用户信息:" + username + "," + password);
        return "success";
    }
}


test_rest.html:


<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
    <p>test_rest 页面</p>
    <a th:href="@{/user}">查询所有用户信息</a><br>
    <a th:href="@{/user/1}">根据用户 id 查询用户信息</a><br>
    <form th:action="@{/user}" method="post">
        用户名:<input type="text" name="username"><br>
        密码:<input type="password" name="password"><br>
        <input type="submit" name="添加用户"><br>
    </form>
</body>
</html>


配置文件里,加上视图控制:


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


这样就可以通过http://localhost:8080/springmvc/testRest访问到test_rest.html的页面了。


1268169-20210815223729720-1932449868.png


点击测试一下。


1268169-20210815223823627-1346678083.png


2. put 和 delete 请求


由于浏览器只支持发送 get 和 post 方式的请求,那么该如何发送 put 和 delete 请求呢?


答案:使用 HiddenHttpMethodFilter 过滤器,可以帮助我们将 POST 请求转换为 DELETE 或 PUT 请求


web.xml中注册HiddenHttpMethodFilter,这个过滤器要配置在编码过滤器之后,防止更新操作获取到的参数是乱码:


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


注意


使用的前提条件有 2 个:


  • 当前请求的请求方式必须为 post
  • 当前请求必须传输请求参数 _method


那么前端页面里修改的表单应该是成这样:


<p>修改用户信息的表单</p>
    <form th:action="@{/user}" method="post">
        <input type="hidden" name="_method" value="put">
        用户名:<input type="text" name="username"><br>
        密码:<input type="password" name="password"><br>
        <input type="submit" name="修改"><br>
    </form>


注意这里name="_method" value="put",value 的值才是真正的方法名。


1268169-20210815225648385-705518918.png


提交测试一下:


1268169-20210815225856920-969925534.png


相关文章
|
2月前
|
前端开发 JavaScript
[SpringMVC]restful风格
[SpringMVC]restful风格
38 1
[SpringMVC]restful风格
|
7月前
|
XML JSON 前端开发
SpringMVC进阶-异常拦截器文件上传和Restful风格(1)
SpringMVC进阶-异常拦截器文件上传和Restful风格(1)
30 0
|
3天前
|
XML JSON 数据库
SpringMVC RESTful
SpringMVC RESTful
13 0
|
2月前
|
XML JSON Java
基于springMVC的RESTful服务实现
  RESTful(RESTful Web Services)一种架构风格,表述性状态转移,它不是一个软件,也不是一个标准,而是一种思想,不依赖于任何通信协议,但是开发时要成功映射到某协议时也需要遵循其标准,但不包含对通信协议的更改
23 1
|
3月前
|
XML JSON 前端开发
SpringMVC之视图和RESTful
【1月更文挑战第19天】 一、SpringMVC的视图 1、ThymeleafView 2、转发视图 3、重定向视图 4、视图控制器view-controller 二、RESTful 1、RESTful简介 a>资源 b>资源的表述 c>状态转移 2、RESTful的实现 3、HiddenHttpMethodFilter
60 0
|
3月前
|
XML JSON 数据库
SpringMVC之RESTful(含实际代码操作)
SpringMVC之RESTful(含实际代码操作)
|
4月前
|
XML JSON Java
SpringMVC原理分析 | Controller配置、RestFul风格
SpringMVC原理分析 | Controller配置、RestFul风格
31 0
|
4月前
|
XML JSON Java
SpringMVC与REST相结合实现RESTful风格
SpringMVC与REST相结合实现RESTful风格
73 0
|
7月前
|
SQL 前端开发 Java
【SpringMVC】RESTful风格CRUD实现
【SpringMVC】RESTful风格CRUD实现
38 0
|
7月前
|
设计模式 算法 前端开发
SpringMVC进阶-异常拦截器文件上传和Restful风格(2)
SpringMVC进阶-异常拦截器文件上传和Restful风格(2)
66 0