??前言
本篇博文是關(guān)于Rest 風(fēng)格請求的應(yīng)用和注意事項,希望能夠幫助到您??
??個人主頁:晨犀主頁
??個人簡介:大家好,我是晨犀,希望我的文章可以幫助到大家,您的滿意是我的動力????
??歡迎大家:這里是CSDN,我總結(jié)知識的地方,歡迎來到我的博客,感謝大家的觀看??
如果文章有什么需要改進的地方還請大佬不吝賜教 先在此感謝啦??
Rest 風(fēng)格請求處理
基本介紹
REST:即Representational State Transfer。(資源)表現(xiàn)層狀態(tài)轉(zhuǎn)化。是目前流行的請求方式。它結(jié)構(gòu)清晰, 很多網(wǎng)站采用
- Rest 風(fēng)格支持(使用HTTP 請求方式動詞來表示對資源的操作)
- 舉例說明:
● 請求方式: /monster
● GET-獲取怪物
● DELETE-刪除怪物
● PUT-修改怪物
● POST-保存妖怪
SpringBoot Rest 風(fēng)格應(yīng)用實例
需求: 演示SpringBoot 中如何實現(xiàn)Rest 風(fēng)格的增刪改查
應(yīng)用實例
1.創(chuàng)建com/nlc/web/controller/MonsterController.java
@RestController
//@Controller
public class MonsterController {
//等價的寫法
//@RequestMapping(value = "/monster",method = RequestMethod.GET)
@GetMapping("/monster")
public String getMonster() {
return "GET-查詢妖怪";
}
//等價寫法
//@RequestMapping(value = "/monster", method = RequestMethod.POST)
@PostMapping("/monster")
public String saveMonster() {
return "POST-添加妖怪";
}
//等價寫法
//@RequestMapping(value = "/monster",method = RequestMethod.PUT)
@PutMapping("/monster")
public String putMonster() {
return "PUT-修改妖怪~~";
}
//等價寫法
//@RequestMapping(value = "/monster", method = RequestMethod.DELETE)
@DeleteMapping("/monster")
public String delMonster() {
return "DELETE-刪除妖怪";
}
}
- 使用Postman 完成測試, 請求url: http://localhost:8080/monster
Rest 風(fēng)格請求-注意事項和細(xì)節(jié)
1、客戶端是PostMan 可以直接發(fā)送Put、delete 等方式請求,可不設(shè)置Filter
2、如果要SpringBoot 支持頁面表單的Rest 功能, 則需要注意如下細(xì)節(jié)
注意
- Rest 風(fēng)格請求核心Filter :HiddenHttpMethodFilter:瀏覽器form 表單只支持GET 與POST 請求,而DELETE、PUT等method 并不支持,Spring 添加了一個過濾器,可以將這些請求轉(zhuǎn)換為標(biāo)準(zhǔn)的http 方法,使得支持GET、POST、PUT 與DELETE 請求。
- 、HiddenHttpMethodFilter 在將post 轉(zhuǎn)成delete / put 請求時,是按_method 參數(shù)名來讀取的。
- 表單請求會被HiddenHttpMethodFilter 攔截, 獲取到表單_method 的值, 再判斷是PUT/DELETE/PATCH(注釋: PATCH 方法是新引入的,是對PUT 方法的補充,用來對已知資源進行局部更新:https://segmentfault.com/q/1010000005685904)。
- 如果要SpringBoot 支持頁面表單的Rest 功能, 需要在application.yml 啟用filter 功能,否則無效。
- 修改application.yml 啟用filter 功能。
spring:
mvc:
static-path-pattern: /res/** #修改靜態(tài)資源訪問的路徑/前綴
hiddenmethod:
filter:
enabled: true #啟用了HiddenHttpMethodFilter,開啟頁面表單的Rest功能
web:
resources:
#修改/指定 靜態(tài)資源的訪問路徑/位置
static-locations: ["classpath:/img/","classpath:/META-INF/resources/",
"classpath:/resources/", "classpath:/static/", "classpath:/public/"]
#String[] staticLocations
- 修改對應(yīng)的頁面, 自己測試即可.
- 創(chuàng)建src\main\resources\public\rest.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>rest</title>
</head>
<body>
<h1>測試rest風(fēng)格的url, 來完成請求.</h1>
<form action="/monster" method="post">
u: <input type="text" name="name"><br/>
<!-- 通過隱藏域傳遞_method 參數(shù)指定值-->
<!--如果要測試delete, put , 就打開下面的注釋-->
<!-- <input type="hidden" name="_method" value="delete">-->
<input type="submit" value="點擊提交">
</form>
</body>
</html>
- 完成測試, 注意url 是localhost:8080/res/rest.html, 如果希望url 是localhost:8080/rest.html, 將application.yml 文件的static-path-pattern: /res/** 注銷即可
小細(xì)節(jié):思考
為什么這里return “GET-查詢妖怪”, 返回的是字符串, 而不是轉(zhuǎn)發(fā)到對應(yīng)的資源文件?
解讀:
因為@ResController 是一個復(fù)合注解, 含有@ResponseBody, 所以springboot 底層(springmvc), 在處理return “xxx” 時, 會以@ResponseBody 注解進行解析處理, 即返回字符串"xxx", 而不會使用視圖解析器來處理。
我們可以試一下, 如果我們把@RestController 改成@Controller , 當(dāng)你訪問getMonster() 時, 如果你有xxx.html就會轉(zhuǎn)發(fā)到xxx.html , 如果沒有xxx.html , 就會報404。
提示: 在測試時, 將xxx.html 放在main\resources\public\xxx.html 進行測試, 并在application.yml 配置視圖解析器
@GetMapping("/monster")
public String getMonster() {
return "GET-查詢妖怪";
}
—在application.yml 配置解析器-----
spring:
mvc:
view:
suffix: .html #后綴
prefix: / #前綴
—提示: 測試完后, 把代碼恢復(fù)原狀-----
使用Postman 進行測試, 可能出現(xiàn)的問題和解決方案分析.
如何解決
spring:
mvc:
# static-path-pattern: /res/** #修改靜態(tài)資源訪問的路徑/前綴
hiddenmethod:
filter:
enabled: true #啟用了HiddenHttpMethodFilter,開啟頁面表單的Rest功能
view: #配置視圖解析器
suffix: .html
prefix: / #這里是需要注意 prefix需要和當(dāng)前的static-path-pattern一致。如果不一致就無法訪問到靜態(tài)資源
??總結(jié)
- 不含有@ResponseBody時, springboot 底層(springmvc) 在處理return “xxx” 時是有順序的。
- 如果配置了視圖解析器,就按照視圖解析器來定位;如果沒有配置視圖解析器,就看controller有沒有/xxx
- HiddenHttpMethodFilter 在將post 轉(zhuǎn)成delete / put 請求時,是按_method 參數(shù)名來讀取的。
??熱門專欄推薦
SpringBoot篇
SpringBoot容器–注解的使用
以數(shù)據(jù)為中心的標(biāo)記語言–yaml
SpringBoot 自動配置–常用配置
Spring Boot介紹–快速入門–約定優(yōu)于配置
安裝Lombok–Lombok的常用注解說明及使用方法
SpringBoot 依賴管理和自動配置—帶你了解什么是版本仲裁文章來源:http://www.zghlxwxcb.cn/news/detail-642214.html
文章到這里就結(jié)束了,如果有什么疑問的地方請指出,諸大佬們一起來評論區(qū)一起討論??
希望能和諸大佬們一起努力,今后我們一起觀看感謝您的閱讀??
如果幫助到您不妨3連支持一下,創(chuàng)造不易您們的支持是我的動力??文章來源地址http://www.zghlxwxcb.cn/news/detail-642214.html
到了這里,關(guān)于Rest 優(yōu)雅的url請求處理風(fēng)格及注意事項的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!