創建名為spring_mvc_rest的新module,過程參考5.2節和6.6節 7.1、簡介 RESTful 也稱為REST(英文:Representational State Transfer)即表現層狀態傳遞,它是一種軟體架構風格或設計風格; REST 是 Roy Fielding 博士( ...
7.1、簡介
-
RESTful 也稱為REST(英文:Representational State Transfer)即表現層狀態傳遞,它是一種軟體架構風格或設計風格;
-
REST 是 Roy Fielding 博士( HTTP 規範的主要編寫者之一)在其2000年的博士論文中提出來的;
-
其作用是,降低開發的複雜性、提高系統的可伸縮性;
-
通過基於 REST 的 API 公開系統資源是一種靈活的方法,可以為不同種類的應用程式提供以標準方式格式化的數據;
-
Ajax 與 REST 之間的完美配合增加了當今人們對 REST 的註意力。
7.2、傳統風格與RESTful風格
-
RESTful 風格提倡 URL 地址使用統一的風格設計,各單詞之間用斜杠分開;
-
RESTful 風格不使用問號鍵值對的方式攜帶請求參數,而是將要發送給伺服器的數據作為 URL 地址的一部分;
-
RESTful 風格中不存在動詞形式的路徑,如updateUser表示修改用戶,是一個動詞,要改為名詞user;
-
RESTful 風格中的路徑只存在資源名稱,增刪改查的操作則是通過 HTTP 的請求方式來體現;
-
HTTP 協議裡面,有四個表示操作方式的動詞:GET、POST、PUT、DELETE;
-
它們分別對應四種基本操作:GET 用來獲取資源,POST 用來新建資源,PUT 用來更新資源,DELETE用來刪除資源。
操作 | 傳統風格 | REST風格 |
---|---|---|
新增操作 | saveUser | user-->post請求方式 |
刪除操作 | deleteUser?id=1 | user/1-->delete請求方式 |
修改操作 | updateUser | user-->put請求方式 |
查詢操作 | getUserById?id=1 | user/1-->get請求方式 |
7.3、GET請求示例(不帶參數)
7.3.1、頁面請求示例
<a th:href="@{/user}">測試查詢所有的用戶信息</a>
7.3.2、控制器方法示例
@RequestMapping(value = "/user",method = RequestMethod.GET)
public String getAllUser(){
System.out.println("查詢所有的用戶信息-->/user-->GET");
return "success";
}
7.3.3、測試效果
7.4、GET請求示例(帶參數)
7.4.1、頁面請求示例
<a th:href="@{/user/1}">測試查詢id為1的用戶信息</a>
7.4.2、控制器方法示例
@RequestMapping(value = "/user/{id}",method = RequestMethod.GET)
public String getUserById(@PathVariable("id") Integer id){
System.out.println("根據id查詢用戶信息-->/user/"+id+"-->GET");
return "success";
}
7.4.3、測試效果
7.5、POST請求示例
7.5.1、頁面請求示例
<form th:action="@{/user}" method="post">
<input type="submit" value="測試新增用戶信息">
</form>
7.5.2、控制器方法示例
@RequestMapping(value = "/user",method = RequestMethod.POST)
public String insertUser(){
System.out.println("新增用戶信息-->/user-->POST");
return "success";
}
7.5.3、測試效果
7.6、配置轉換請求方式的過濾器
-
實際上,瀏覽器只支持發送 GET 和 POST 方式的請求;
-
SpringMVC 提供的 HiddenHttpMethodFilter 可以將 POST 請求轉換為 DELETE 或 PUT 請求;
-
使用 HiddenHttpMethodFilter 將 POST 請求轉換為 DELETE 或 PUT 請求,須滿足兩個條件:
a、當前請求的請求方式必須為post
b、當前請求必須傳輸請求參數_method -
滿足以上條件,HiddenHttpMethodFilter 過濾器就會將當前請求的請求方式轉換為請求參數_method的值,
因此請求參數_method的值才是最終的請求方式。
註意:HiddenHttpMethodFilter過濾器的順序,要在CharacterEncodingFilter過濾器的後面
<!--配置處理請求方式的過濾器-->
<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>
7.7、PUT請求示例
7.7.1、頁面請求示例
<form th:action="@{/user}" method="post">
<input type="hidden" name="_method" value="put">
<input type="submit" value="測試修改用戶信息">
</form>
7.7.2、控制器方法示例
@RequestMapping(value = "/user",method = RequestMethod.PUT)
public String updateUser(){
System.out.println("修改用戶信息-->/user-->PUT");
return "success";
}
7.7.3、測試效果
7.8、DELETE請求示例
7.8.1、頁面請求示例
<form th:action="@{/user/2}" method="post">
<input type="hidden" name="_method" value="delete">
<input type="submit" value="測試刪除id為2的用戶信息">
</form>
7.8.2、控制器方法示例
@RequestMapping(value = "/user/{id}",method = RequestMethod.DELETE)
public String deleteUser(@PathVariable("id") Integer id){
System.out.println("根據id刪除用戶信息-->/user/"+id+"-->DELETE");
return "success";
}
7.8.3、測試效果
7.9、結合請求方式的派生註解
對於處理指定請求方式的控制器方法,SpringMVC中提供了@RequestMapping的派生註解
-
處理get請求的派生註解-->@GetMapping
-
處理post請求的派生註解-->@PostMapping
-
處理put請求的派生註解-->@PutMapping
-
處理delete請求的派生註解-->@DeleteMapping