Spring?Boot請(qǐng)求處理之常用參數(shù)注解使用教程
請(qǐng)求處理-SpringBoot常用參數(shù)注解使用
注解:
- @PathVariable 路徑變量
- @RequestHeader 獲取請(qǐng)求頭
- @RequestParam 獲取請(qǐng)求參數(shù)(指問號(hào)后的參數(shù),
url?a=1&b=2
) - @CookieValue 獲取Cookie值
- @RequestAttribute 獲取request域?qū)傩?/li>
- @RequestBody 獲取請(qǐng)求體[POST]
- @MatrixVariable 矩陣變量
- @ModelAttribute
1、@PathVariable注解
該注解主要是用于rest風(fēng)格的搭配使用,在請(qǐng)求路徑中不再以k : v
的形式給出請(qǐng)求參數(shù)與值;而是直接給定一個(gè)值。如果方法參數(shù)是一個(gè)Map<String, String>
將會(huì)包含路徑中所有的變量與值。
訪問:瀏覽器輸入路徑變量即可,以下是rest風(fēng)格的get請(qǐng)求的展示,直接在地址欄發(fā)起請(qǐng)求就是一個(gè)get請(qǐng)求
獲取所有訪問路徑上的請(qǐng)求參數(shù):localhost:8080/ car/{id}/owner/{username}?age=19&inters=
2、@RequestHeader注解
該注解主要用于獲取請(qǐng)求頭header中的數(shù)據(jù),客戶端請(qǐng)求之后可以拿到一些頭部攜帶的參數(shù)。支持傳統(tǒng)的SpringMVC,也支持WebFlux響應(yīng)式。如果方法參數(shù)是一個(gè)Map<String, String>
將會(huì)包含所有的請(qǐng)求頭與值
@GetMapping("user/RequestHeader") public Map<String,Object> getUser3(@RequestHeader("Accept") String Accept, @RequestHeader Map<String,String> header){ Map<String,Object> map=new HashMap<>(); map.put("Accept",Accept); map.put("header",header); return map; }
測試:
3、@RequestParam注解
主要用于獲取請(qǐng)求參數(shù)名稱,設(shè)置參數(shù)是否可有可無以及默認(rèn)值。
@RequestParam注解詳解地址:blog.csdn.net/weixin_4380…
4、@CookieValue注解
主要用于獲取Cookie值
5、@RequestAttribute注解
主要用在請(qǐng)求轉(zhuǎn)發(fā)時(shí),如果頁面無法直接跳轉(zhuǎn)(如WEB-INF下的success頁面)可以使用轉(zhuǎn)發(fā)的手段。當(dāng)進(jìn)行轉(zhuǎn)發(fā)時(shí)可以在請(qǐng)求中攜帶上請(qǐng)求的參數(shù),轉(zhuǎn)發(fā)會(huì)攜帶上一次請(qǐng)求的參數(shù)(一次完整的請(qǐng)求包括轉(zhuǎn)發(fā))
由于是同一次請(qǐng)求,因此也可以直接拿到原生的HttpServletRequest,然后從這里面拿參數(shù)和屬性也都是可以的【獲取request域?qū)傩浴俊?/p>
下面就體現(xiàn)了一種轉(zhuǎn)發(fā)的思想
結(jié)果
6、@RequestBody注解
主要獲取表單或者ajax提交的內(nèi)容,將表單中提交的參數(shù)與值獲取全部獲取出來。即獲取請(qǐng)求體【所以請(qǐng)求必須是post請(qǐng)求--@PostMapping】,一般情況下都會(huì)使用@RequestBody注解將參數(shù)映射到pojo類的能力,但是要保證前后傳入的參數(shù)名是一樣的
7、@MatrixVariable與UrlPathHelper
7.1、基本簡介
上述是最常見的三種請(qǐng)求方式;而矩陣變量請(qǐng)求是今天的主角一種新的請(qǐng)求風(fēng)格,嚴(yán)格來說矩陣變量的請(qǐng)求需要用到rest風(fēng)格但是又不同于rest.
面試官:頁面開發(fā)當(dāng)中把cookie禁用了,session里面的內(nèi)容怎么使用(找到)???
- 正常使用cookie的情況:session.set(a,b)→jsessionid→cookie→每次發(fā)請(qǐng)求攜帶該值
- 每一個(gè)用戶都有一個(gè)不同的sessionid,我們稱之為jsessionid,jsessionid會(huì)被保存在cookie里面,我們用戶在發(fā)送請(qǐng)求的時(shí)候都會(huì)攜帶cookie。因此禁用了cookie就不能獲取里面保存的對(duì)象。
- 解決禁用cookie的情況:假設(shè)訪問路徑/abc。我們可以用矩陣變量的形式攜帶
jsessionid
值:/abc;jsessionid=xxx
。上面的過程就是url重寫的過程,相當(dāng)于把cookie的值使用矩陣變量的方式進(jìn)行傳遞。
7.2、MatrixVariable注解
由上面源碼知道首先可以知道這個(gè)注解是一個(gè)修飾在參數(shù)上的注解,并且可以在運(yùn)行時(shí)被JVM虛擬機(jī)加載到。
- value 和 name屬性是兩個(gè)相同的屬性,用于綁定獲取到請(qǐng)求的參數(shù)。
- pathvar是一個(gè)比較重要的屬性,當(dāng)多級(jí)路徑中出現(xiàn)了相同的參數(shù)可以用pathvar指定綁定哪一級(jí)路徑,然后在獲取該級(jí)下的參數(shù)。
- required屬性主要是修飾當(dāng)前這個(gè)矩陣變量是否是必須的;true表示必須,false表示非必須。
- defaultValue屬性當(dāng)required屬性值為false時(shí),提交請(qǐng)求的矩陣變量中沒有給定該參數(shù)的值可以使用默認(rèn)值替代。
7.3、使用細(xì)節(jié)
由于SpringBoot中默認(rèn)并沒有開啟矩陣變量的支持,直接關(guān)閉了矩陣變量。因此在使用的時(shí)候我們需要對(duì)SpringBoot自動(dòng)裝配的Bean對(duì)象進(jìn)行手動(dòng)的配置更改。
7.3.1、WebMvcAutoConfiguration自動(dòng)裝配
- WebMvcAutoConfiguration自動(dòng)裝配類由SpringBoot啟動(dòng)時(shí)自動(dòng)裝配;
- 內(nèi)部類WebMvcAutoConfigurationAdapter適配器實(shí)現(xiàn)了WebMvcConfigurer接口中的所有方法。
- WebMvcConfigurer接口中的所有方法都是有默認(rèn)實(shí)現(xiàn)的,JDK8的新特性。
7.3.2、UrlPathHelper類
真正使得無法使用矩陣變量的原因是UrlPathHelper類中的removeSemicolonContent默認(rèn)為true,即移除分號(hào)內(nèi)容。
- 由于MatrixVariable矩陣變量是根據(jù)分號(hào)進(jìn)行區(qū)分的,而底層默認(rèn)是移除的也就是說不生效。
- 因此手動(dòng)開啟原理:對(duì)于路徑的處理,SpringBoot用UrlPathHelper進(jìn)行解析,其里面的屬性removeSemicolonContent設(shè)置為false,才能讓其支持矩陣變量。
7.3.3、手動(dòng)配置矩陣變量
方法:參照第一章說的SpringBoot三個(gè)自配置規(guī)則,利@configuration+WebMvcConfigurer
自定義規(guī)則即可,因此為了開啟矩陣變量的使用必須實(shí)現(xiàn)WebMvcConfigurer
接口,完成對(duì)configurePathMatch
方法的手動(dòng)實(shí)現(xiàn)。而WebMvcConfigurer接口中所有的方法都是default的默認(rèn)方法,因此可以使用適配器模式單獨(dú)對(duì)該方法進(jìn)行重寫。所以可以在配置類中手動(dòng)向IOC容器中配置一個(gè)Bean對(duì)象,該對(duì)象只對(duì)這一個(gè)方法進(jìn)行重寫實(shí)現(xiàn)即可。
重寫如下
7.4、測試使用
首先必須手動(dòng)配置對(duì)矩陣變量的支持,其次矩陣變量是綁定在rest路徑變量中的
7.4.1、測試一
上述兩種路徑都會(huì)使用同一個(gè)Controller進(jìn)行處理,path拿到的就是 /
到第一個(gè) ;
號(hào)之間的路徑。
7.4.2、測試二
Gage綁定{gege}中的age參數(shù),Dage綁定{didi}中的age;這樣就能準(zhǔn)確的區(qū)分出到底獲取哪個(gè)age。
7.4.3、測試三
8、補(bǔ)充:SpringBoot實(shí)現(xiàn)前后端數(shù)據(jù)交互、json數(shù)據(jù)交互、Controller接收參數(shù)的幾種常用方式
摘自:http://www.dbjr.com.cn/article/240671.htm
現(xiàn)在大多數(shù)互聯(lián)網(wǎng)項(xiàng)目都是采用前后端分離的方式開發(fā),前端人員負(fù)責(zé)頁面展示和數(shù)據(jù)獲取,后端負(fù)責(zé)業(yè)務(wù)邏輯處理和接口封裝。當(dāng)與前端交互的過程當(dāng)中,常用json數(shù)據(jù)與前端進(jìn)行交互,這樣想取出前端傳送過來的json數(shù)據(jù)的時(shí)候,就需要用到@RequestBody這個(gè)注解。@RequestBody注解用于讀取http請(qǐng)求的內(nèi)容(字符串),通過springmvc提供的HttpMessageConverter接口將讀到的內(nèi)容轉(zhuǎn)換為json、xml等格式的數(shù)據(jù)并綁定到controller方法的參數(shù)上。
提交方式為 POST 時(shí),
JQuery Ajax 以 application/x-www-form-urlencoded 上傳 JSON對(duì)象 ,后端用 @RequestParam 或者Servlet 獲取參數(shù)。
JQuery Ajax 以 application/json 上傳 JSON字符串,后端用 @RquestBody 獲取參數(shù)。
獲取參數(shù)的幾種常用注解
@PathVariable:一般我們使用URI template樣式映射使用,即url/{param}這種形式,也就是一般我們使用的GET,DELETE,PUT方法會(huì)使用到的,我們可以獲取URL后所跟的參數(shù)。
@RequestParam:一般我們使用該注解來獲取多個(gè)參數(shù),在()內(nèi)寫入需要獲取參數(shù)的參數(shù)名即可,一般在PUT,POST中比較常用。
@RequestBody:該注解和@RequestParam殊途同歸,我們使用該注解將所有參數(shù)轉(zhuǎn)換,在代碼部分在一個(gè)個(gè)取出來,也是目前我使用到最多的注解來獲取參數(shù)
還有@RequestHeader來獲取頭信息里的值,@CookieValue來獲取Cookie值等等。在這,我也僅僅說明一些較常用的取值方法而已。
總結(jié)
到此這篇關(guān)于Spring Boot請(qǐng)求處理之常用參數(shù)注解使用的文章就介紹到這了,更多相關(guān)Spring Boot請(qǐng)求參數(shù)注解內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
并行Stream與Spring事務(wù)相遇會(huì)發(fā)生什么?
這篇文章主要介紹了并行Stream與Spring事務(wù)相遇會(huì)發(fā)生什么?文章主要解決實(shí)戰(zhàn)中的Bug及解決方案和技術(shù)延伸,具有一定的參考價(jià)值,需要的小伙伴可以參考一下2022-05-05SpringBoot整合Mybatis Plus多數(shù)據(jù)源的實(shí)現(xiàn)示例
本文主要介紹了SpringBoot整合Mybatis Plus多數(shù)據(jù)源的實(shí)現(xiàn)示例,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-11-11MyBatis的collection和association的使用解讀
這篇文章主要介紹了MyBatis的collection和association的使用解讀2023-12-12springboot項(xiàng)目test文件夾下帶main方法的類不能運(yùn)行問題
這篇文章主要介紹了springboot項(xiàng)目test文件夾下帶main方法的類不能運(yùn)行問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-11-11maven插件spring-boot-starter-tomcat的使用方式
這篇文章主要介紹了maven插件spring-boot-starter-tomcat的使用方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-07-07Mybatis-Plus主鍵插入null值報(bào)錯(cuò)問題及解決
這篇文章主要介紹了Mybatis-Plus主鍵插入null值報(bào)錯(cuò)問題及解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-07-07