SpringMVC?RESTFul及REST架構風格介紹
一、RESTful 簡介
REST 是一種軟件架構風格。
REST:Representational State Transfer,表現(xiàn)層資源狀態(tài)轉移。
對此,有幾個名字需要理解一下:
表現(xiàn)層:實際上就是前端的頁面到后端的控制層。
資源:當應用部署到服務器上之后,萬物皆資源,比如一個類、一個html頁面等等。
- 1-資源是一種看待服務器的方式,即將服務器看作是由很多離散的資源組成。每個資源是服務器上一個可命名的抽象概念。
- 2-因為資源是一個抽象的概念,所以它不僅僅能代表服務器文件系統(tǒng)中的一個文件、數(shù)據(jù)庫中的一張表等等具體的東西,可以將資源設計的要多抽象有多抽象,只要想象力允許而且客戶端應用開發(fā)者能夠理解。
- 3-與面向對象設計類似,資源是以名詞為核心來組織的,首先關注的是名詞。
- 4-一個資源可以由一個或多個URI來標識。
- 5-URI既是資源的名稱,也是資源在Web上的地址。
- 6-對某個資源感興趣的客戶端應用,可以通過資源的URI與其進行交互。
資源的表述:是一段對于資源在某個特定時刻的狀態(tài)的描述。
- 1-可以在客戶端-服務器端之間轉移(交換)。
- 2-資源的表述可以有多種格式,例如HTML/XML/JSON/純文本/圖片/視頻/音頻等等。
- 3-資源的表述格式可以通過協(xié)商機制來確定。
- 4-請求-響應方向的表述通常使用不同的格式。
狀態(tài)轉移:在客戶端和服務器端之間轉移(transfer)代表資源狀態(tài)的表述。通過轉移和操作資源的表述,來間接實現(xiàn)操作資源的目的。
二、RESTful 的實現(xiàn)
具體說,就是 HTTP 協(xié)議里面,四個表示操作方式的動詞:GET、POST、PUT、DELETE。
它們分別對應四種基本操作:
- GET 用來獲取資源
- POST 用來新建資源
- PUT 用來更新資源
- DELETE 用來刪除資源
REST 風格提倡 URL 地址使用統(tǒng)一的風格設計,從前到后各個單詞使用斜杠分開。
不使用問號鍵值對方式攜帶請求參數(shù),而是將要發(fā)送給服務器的數(shù)據(jù)作為 URL 地址的一部分,以保證整體風格的一致性。比如:

實踐一下
使用 RESTFul 模擬一下用戶資源的增刪改查。
1. get 和 post 請求
控制器方法:
@Controller
public class UserController {
/**
* /user GET 查詢所有用戶信息
* /user/1 GET 根據(jù)用戶 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("根據(jù)用戶 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}" rel="external nofollow" >查詢所有用戶信息</a><br>
<a th:href="@{/user/1}" rel="external nofollow" >根據(jù)用戶 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的頁面了。

點擊測試一下。

2. put 和 delete 請求
由于瀏覽器只支持發(fā)送 get 和 post 方式的請求,那么該如何發(fā)送 put 和 delete 請求呢?
答案:使用 HiddenHttpMethodFilter 過濾器,可以幫助我們將 POST 請求轉換為 DELETE 或 PUT 請求。
在web.xml中注冊HiddenHttpMethodFilter,這個過濾器要配置在編碼過濾器之后,防止更新操作獲取到的參數(shù)是亂碼:
<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當
- 前請求必須傳輸請求參數(shù) _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 的值才是真正的方法名。

提交測試一下:

感謝《尚硅谷》的學習資源。
以上就是SpringMVC RESTFul及REST架構風格介紹的詳細內容,更多關于SpringMVC RESTFul架構風格的資料請關注腳本之家其它相關文章!
相關文章
Springboot中@RequestParam和@PathVariable的用法與區(qū)別詳解
這篇文章主要介紹了Springboot中@RequestParam和@PathVariable的用法與區(qū)別詳解,RESTful API設計的最佳實踐是使用路徑參數(shù)來標識一個或多個特定資源,而使用查詢參數(shù)來對這些資源進行排序/過濾,需要的朋友可以參考下2024-01-01
Spring Boot利用Docker快速部署項目的完整步驟
這篇文章主要給大家介紹了關于Spring Boot利用Docker快速部署項目的完整步驟,文中通過示例代碼介紹的非常詳細,對大家學習或者使用Spring Boot具有一定的參考學習價值,需要的朋友們下面來一起學習學習吧2019-07-07
Java微服務Filter過濾器集成Sentinel實現(xiàn)網(wǎng)關限流過程詳解
這篇文章主要介紹了Java微服務Filter過濾器集成Sentinel實現(xiàn)網(wǎng)關限流過程,首先Sentinel規(guī)則的存儲默認是存儲在內存的,應用重啟之后規(guī)則會丟失。因此我們通過配置中心Nacos保存規(guī)則,然后通過定時拉取Nacos數(shù)據(jù)來獲取規(guī)則配置,可以做到動態(tài)實時的刷新規(guī)則2023-02-02
Spring context:component-scan的使用及說明
這篇文章主要介紹了Spring context:component-scan的使用及說明,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2023-09-09
SLF4J報錯解決:No SLF4J providers were found的
這篇文章主要介紹了SLF4J報錯解決:No SLF4J providers were found的問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2023-06-06

