關於SpringMVC對Restful風格的支持詳解
前言
RESTFUL是一種網絡應用程序的設計風格和開發方式,基於HTTP,可以使用XML格式定義或JSON格式定義。
一、RESTful簡介
REST:Representational State Transfer,表現層資源狀態轉移。
1.1、資源
資源是一種看待服務器的方式。即,將服務器看作是由很多離散的資源組成。
每個資源是服務器上一個可命名的抽象概念。
因為資源是一個抽象的概念,所以它不僅僅能代表服務器文件系統中的一個文件、數據庫中的一張表等等具體的東西,可以將資源設計的要多抽象有多抽象,隻要想象力允許而且客戶端應用開發者能夠理解。
與面向對象設計類似,資源是以名詞為核心來組織的,首先關註的是名詞。
一個資源可以由一個或多個URI來標識。URI既是資源的名稱,也是資源在Web上的地址。對某個資源感興趣的客戶端應用,可以通過資源的URI與其進行交互。
1.2、資源的表述
資源的表述是一段對於資源在某個特定時刻的狀態的描述。可以在客戶端-服務器端之間轉移(交換)。
資源的表述可以有多種格式,例如HTML/XML/JSON/純文本/圖片/視頻/音頻等等。
資源的表述格式可以通過協商機制來確定。請求-響應方向的表述通常使用不同的格式。
1.3、狀態轉移
狀態轉移說的是:在客戶端和服務器端之間轉移(transfer)代表資源狀態的表述。通過轉移和操作資源的表述,來間接實現操作資源的目的。
RESTful規范
1、對URL進行規范,寫RESTful格式的URL
非REST的URL:http://…./queryItems.action?id=001
REST的URL風格:http://…./items/001
特點:URL簡潔,將參數通過URL傳到服務端,請求URL隻是對資源的定位,因此不應該出現動詞
2、http的方法規范
不管是刪除、添加、更新,使用的URL是一致的,如果進行刪除,需設置HTTP的方法為delete,其它同理
後臺controller方法:判斷http方法,如果是delete則執行刪除,如果是post則執行添加
3、對http的contentType規范
請求時執行contentType,要json數據,則設置成json格式的type
而實際使用中第2點往往沒有做到
二、RESTful的實現
具體說,就是 HTTP 協議裡面,四個表示操作方式的動詞:GET、POST、PUT、DELETE。
它們分別對應四種基本操作:GET 用來獲取資源,POST 用來新建資源,PUT 用來更新資源,DELETE 用來刪除資源。
REST 風格提倡 URL 地址使用統一的風格設計,從前到後各個單詞使用斜杠分開,不使用問號鍵值對方式攜帶請求參數,而是將要發送給服務器的數據作為 URL 地址的一部分,以保證整體風格的一致性。
操作 | 傳統方式 | REST風格 |
---|---|---|
查詢操作 | getUserById?id=1 | user/1–>get請求方式 |
保存操作 | saveUser | user–>post請求方式 |
刪除操作 | deleteUser?id=1 | user/1–>delete請求方式 |
更新操作 | updateUser | user–>put請求方式 |
三、HiddenHttpMethodFilter
Q:由於瀏覽器隻支持發送get和post方式的請求,那麼該如何發送put和delete請求呢?
A:SpringMVC 提供瞭 HiddenHttpMethodFilter 幫助我們將 POST 請求轉換為 DELETE 或 PUT 請求。
3.1、HiddenHttpMethodFilter 過濾器處理put和delete請求
要求:
- 當前請求的請求方式必須為post。
- 當前通過post請求封裝的實際請求方式通過請求參數_method傳輸。
HiddenHttpMethodFilter 過濾器就會將當前請求的請求方式轉換為請求參數_method的值,因此請求參數_method的值才是最終的請求方式。
3.2、在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>
3.3、過濾器的先後配置順序
當 SpringMVC中提供瞭兩個過濾器:CharacterEncodingFilter和HiddenHttpMethodFilter 在web.xml中註冊時,必須先註冊CharacterEncodingFilter,再註冊HiddenHttpMethodFilter。
原因:
在 CharacterEncodingFilter 中通過 request.setCharacterEncoding(encoding)
方法設置字符集的 request.setCharacterEncoding(encoding)
方法要求前面不能有任何獲取請求參數的操作。
而 HiddenHttpMethodFilter 恰恰有一個獲取請求方式的操作:String paramValue = request.getParameter(this.methodParam);
總結
到此這篇關於SpringMVC對Restful風格支持的文章就介紹到這瞭,更多相關SpringMVC對Restful風格的支持內容請搜索WalkonNet以前的文章或繼續瀏覽下面的相關文章希望大傢以後多多支持WalkonNet!
推薦閱讀:
- 一篇文章帶你搞懂Java restful 接口開發
- SpringMVC RESTFul及REST架構風格介紹
- springmvc字符編碼過濾器CharacterEncodingFilter的使用
- SpringBoot中的PUT和Delete請求使用
- Java CharacterEncodingFilter案例詳解