欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Spring?Boot請(qǐng)求處理之常用參數(shù)注解使用教程

 更新時(shí)間:2022年03月14日 12:03:47   作者:花粥之間  
這篇文章主要給大家介紹了關(guān)于Spring?Boot請(qǐng)求處理之常用參數(shù)注解使用的相關(guān)資料,文中通過圖文介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下

請(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)文章

  • 解決使用security和靜態(tài)資源被攔截的問題

    解決使用security和靜態(tài)資源被攔截的問題

    這篇文章主要介紹了解決使用security和靜態(tài)資源被攔截的問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-08-08
  • 并行Stream與Spring事務(wù)相遇會(huì)發(fā)生什么?

    并行Stream與Spring事務(wù)相遇會(huì)發(fā)生什么?

    這篇文章主要介紹了并行Stream與Spring事務(wù)相遇會(huì)發(fā)生什么?文章主要解決實(shí)戰(zhàn)中的Bug及解決方案和技術(shù)延伸,具有一定的參考價(jià)值,需要的小伙伴可以參考一下
    2022-05-05
  • SpringBoot整合Mybatis Plus多數(shù)據(jù)源的實(shí)現(xiàn)示例

    SpringBoot整合Mybatis Plus多數(shù)據(jù)源的實(shí)現(xiàn)示例

    本文主要介紹了SpringBoot整合Mybatis Plus多數(shù)據(jù)源的實(shí)現(xiàn)示例,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-11-11
  • Java鏈表超詳細(xì)講解(通俗易懂,含源碼)

    Java鏈表超詳細(xì)講解(通俗易懂,含源碼)

    鏈表是一種物理存儲(chǔ)結(jié)構(gòu)上非連續(xù)存儲(chǔ)結(jié)構(gòu),數(shù)據(jù)元素的邏輯順序是通過鏈表中的引用鏈接次序?qū)崿F(xiàn)的,下面這篇文章主要給大家介紹了關(guān)于Java鏈表超詳細(xì)講解的相關(guān)資料,本文講解的內(nèi)容通俗易懂,含源碼,需要的朋友可以參考下
    2022-09-09
  • Java的MD5工具類和客戶端測試類

    Java的MD5工具類和客戶端測試類

    這篇文章主要介紹了Java的MD5工具類和客戶端測試類,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2021-12-12
  • MyBatis的collection和association的使用解讀

    MyBatis的collection和association的使用解讀

    這篇文章主要介紹了MyBatis的collection和association的使用解讀
    2023-12-12
  • springboot項(xiàng)目test文件夾下帶main方法的類不能運(yùn)行問題

    springboot項(xiàng)目test文件夾下帶main方法的類不能運(yùn)行問題

    這篇文章主要介紹了springboot項(xiàng)目test文件夾下帶main方法的類不能運(yùn)行問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-11-11
  • maven插件spring-boot-starter-tomcat的使用方式

    maven插件spring-boot-starter-tomcat的使用方式

    這篇文章主要介紹了maven插件spring-boot-starter-tomcat的使用方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-07-07
  • Mybatis-Plus主鍵插入null值報(bào)錯(cuò)問題及解決

    Mybatis-Plus主鍵插入null值報(bào)錯(cuò)問題及解決

    這篇文章主要介紹了Mybatis-Plus主鍵插入null值報(bào)錯(cuò)問題及解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-07-07
  • Java中的CopyOnWriteArrayList解析

    Java中的CopyOnWriteArrayList解析

    這篇文章主要介紹了Java中的CopyOnWriteArrayList解析,ArrayList是非線程安全的,也就是說在多個(gè)線程下進(jìn)行讀寫,會(huì)出現(xiàn)異常,既然是非線程安全,那我們就使用一些機(jī)制把它變安全不就好了,需要的朋友可以參考下
    2023-12-12

最新評(píng)論