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

SpringBoot2零基礎(chǔ)到精通之映射與常用注解請求處理

 更新時間:2022年03月22日 14:21:36   作者:扎哇太棗糕  
SpringBoot是一種整合Spring技術(shù)棧的方式(或者說是框架),同時也是簡化Spring的一種快速開發(fā)的腳手架,本篇讓我們一起學(xué)習(xí)映射、常用注解和方法參數(shù)的小技巧

1 請求映射

??在SpringBoot中使用@XxxMapping注解完成前端請求與后端方法的一個映射。以前的時候,通常使用url映射命名的方式完成增刪改查的操作,比如:/getUser 查找用戶/deleteUser 刪除用戶 /editUser更改用戶 /saveUser 添加用戶。但是,后來出現(xiàn)了Rest風(fēng)格的請求方式一直沿用至今。

1.1 Rest風(fēng)格

??Rest風(fēng)格就是使用HTTP請求方式動詞來表示對資源的增刪改查等操作,比如:GET查找用戶DELETE刪除用戶PUT更改用戶 POST添加用戶。具體使用如下:

??但是前端form表單的method只有POST、GET兩種方法,如何使用PUT、DELETE兩種方法呢?這就使用到了HiddenHttpMethodFilter,在源碼的WebMvcAutoConfiguration自動配置類中使用OrderedHiddenHttpMethodFilter方法(方法源碼在下面),其中返回它同名類對象,該類向上兩層的父類HiddenHttpMethodFilter中定義了如何使用PUT、DELETE兩種方法(源碼見下面圖片)

@Bean
@ConditionalOnMissingBean({HiddenHttpMethodFilter.class})
// 這里的隱藏方法過濾器默認(rèn)是不開啟的,通過下面的prefix和name即可在配置文件將其配置為true
@ConditionalOnProperty(
    prefix = "spring.mvc.hiddenmethod.filter",
    name = {"enabled"}
)
public OrderedHiddenHttpMethodFilter hiddenHttpMethodFilter() {
    return new OrderedHiddenHttpMethodFilter();
}

??了解源碼的規(guī)范之后,讓我們試著進(jìn)行編碼,總結(jié)上述文字得知:若想使用Rest風(fēng)格的請求,需要進(jìn)行兩步操作①配置文件中開啟隱藏方法過濾器(據(jù)說高版本的SpringBoot源碼中默認(rèn)是開啟的)②form表單的method為POST并加入_method的值為相應(yīng)的PUT、DELETE

1.2 表單提交Rest的原理

??表單在使用Rest風(fēng)格的請求方式提交的時候,會帶上input標(biāo)簽里_method的對應(yīng)值PUT、DELETE,當(dāng)請求發(fā)送過來的時候?qū)籋iddenHttpMethodFilter所攔截進(jìn)行判斷(form表單的method是否為POST且無報錯),判斷通過之后獲取_method對應(yīng)的值。原生request(post)的包裝模式xxxWrapper重寫了getMethod方法,返回的是_method傳入的值。后面的controller方法中url映射的method的值就是經(jīng)過方法重寫之后獲得的傳入值。

?? 像form表單的method只有POST、GET兩個值的情況需要將配置文件中的隱藏方法過濾器開啟,別的如PostMan直接發(fā)送Put、delete等方式請求就無需使用HiddenHttpMethodFilter ? ?根據(jù)四種配置演變出的四個新注解

? ?自定義_method名稱的方法:自定義一個webConfig類類中來創(chuàng)建一個HiddenHttpMethodFilter方法,調(diào)用它的setMethodFilter方法即可實現(xiàn)定制

1.3請求映射的原理

??SpringBoot和SpringMVC一樣,前端發(fā)送的所有請求都一定會到DispatcherServlet中,而DispatcherServlet本身就是一個servlet繼承自HttpServlet。一個servlet必定會重寫doGet和doPost方法,于是通過對源碼進(jìn)行分析發(fā)現(xiàn)在HttpServlet的子類FrameworkServlet(它同時也是DispatcherServlet的父類)中重寫了doGet和doPost方法,并且重寫之后的doXxx方法都是調(diào)用了本類的processRequest方法,這個方法的底層又調(diào)用了本類的doService抽象方法,抽象方法沒有方法體,繼承該類的子類必須重寫該方法,于是乎在它的子類中找到了重寫之后的doService方法,這個方法中除了前面一大堆的初始化之外調(diào)用本類的doDispatch方法(這個才是最重要的一個方法)

從上文的析得知,SpringMVC的功能都要從DispatcherServlet類的doDispatch方法中分析得出,此方法使用getHandler(processedRequest)有參構(gòu)造器里的對獲取到的所有請求使用for循環(huán)逐個匹配下面的handlerMappings,而前兩個都是在WebMvcAutoConfiguration自動配置類中配置過的。

? ?拓展知識:如果一些特殊場景需要對不同的請求映射不同的代碼包,比如普通用戶和VIP用戶的功能肯定是不一樣的,所以在此時我們就可以借助給容器中注冊自定義HandlerMapping的方式來完成。

2 請求處理常用注解

??以下的注解都可以通過鍵名獲取單個鍵的值,也可以使用map集合(kv都是必須String)獲取所有的參數(shù)

2.1 @RequestParam

??@RequestParam注解用來獲取請求參數(shù)的值

2.2 @PathVariable

??在Restful請求風(fēng)格中,通常使用路徑的方式進(jìn)行參數(shù)的傳遞,@PathVariable注解就是用來獲取url路徑中參數(shù)的值

2.3 @RequestHeader

??@RequestHeader注解用來獲取請求頭的值

2.4 @RequestBody

??@RequestBody注解用來獲取請求體的值

2.5 @RequestAttribute

??@RequestAttribute用來獲取request域的值,兩種獲取方式:①直接@RequestAttribute注解 ②HttpServletRequest對象的getAttribute方法。這個注解無法使用map獲取所有的值

2.6 @RequestAttribute

??使用session.set(k, v)設(shè)置的屬性值存儲在session中,而每個用戶都有其唯一對應(yīng)的jsessionid保存在cookie中,每次發(fā)送請求cookie都會攜帶這個jsessionid,服務(wù)器通過jsessionid解析出session對象之后再調(diào)用get(k)方法獲取對應(yīng)的屬性值。 但是現(xiàn)在有這么一個情況,在頁面開發(fā)的時候禁用了cookie(相當(dāng)于session也失效了),這個時候怎么獲取屬性值?通過url重寫使用矩陣變量的方式進(jìn)行傳遞。使用該方法需要有以下兩步:

第一步: SpringBoot默認(rèn)禁用矩陣變量,可通過自定義配置類向容器注冊WebMvcConfigurer組件替代默認(rèn)的組件來開啟矩陣變量

第二步: 分單矩陣和多矩陣兩種用法

3 方法參數(shù)小技巧

3.1 復(fù)雜參數(shù)屬性值

??方法中有時會傳入一些復(fù)雜的參數(shù),比如Map、Model、request、response等,其中前三種參數(shù)的設(shè)置的屬性值數(shù)據(jù)都會存放在request請求域中。接下來使用代碼證實一下這個說法:

3.2 自定義參數(shù)實現(xiàn)數(shù)據(jù)綁定

??頁面提交的請求數(shù)據(jù)(GET、POST)都可以和自定義對象參數(shù)的屬性(也就是POJO類的參數(shù))進(jìn)行綁定

到此這篇關(guān)于SpringBoot2零基礎(chǔ)到精通之映射與常用注解請求處理的文章就介紹到這了,更多相關(guān)SpringBoot2 映射與常用注解內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Spring示例講解條件注入方法

    Spring示例講解條件注入方法

    Spring支持按照條件來注入某些特定的bean,這也是Spring Boot實現(xiàn)自動化配置的底層方法,文中的示例代碼講解詳細(xì),需要的可以參考一下
    2022-06-06
  • 使用maven一步一步構(gòu)建spring mvc項目(圖文詳解)

    使用maven一步一步構(gòu)建spring mvc項目(圖文詳解)

    這篇文章主要介紹了詳解使用maven一步一步構(gòu)建spring mvc項目,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-09-09
  • Java?LockSupport常用方法的源碼分析

    Java?LockSupport常用方法的源碼分析

    這篇文章主要為大家詳細(xì)介紹了Java?LockSupport類中的方法和部分源碼,以及面試常問到的一個小問題,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2023-02-02
  • 使用SpringSecurity設(shè)置角色和權(quán)限的注意點

    使用SpringSecurity設(shè)置角色和權(quán)限的注意點

    這篇文章主要介紹了使用SpringSecurity設(shè)置角色和權(quán)限的注意點,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-03-03
  • 淺析Java中接口和抽象類的七大區(qū)別

    淺析Java中接口和抽象類的七大區(qū)別

    Java 是一門面向?qū)ο蟮木幊陶Z言,面向?qū)ο蟮木幊陶Z言有四大特征:抽象、封裝、繼承和多態(tài)。本文介紹的接口和抽象類就是面向?qū)ο缶幊讨小俺橄蟆钡木唧w實現(xiàn)。本文也將為大家詳細(xì)講一下二者的區(qū)別,需要的可以參考一下
    2021-12-12
  • 一篇文章帶你深入了解Java基礎(chǔ)

    一篇文章帶你深入了解Java基礎(chǔ)

    這篇文章主要給大家介紹了關(guān)于Java中方法使用的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-08-08
  • Struts2框架初學(xué)接觸

    Struts2框架初學(xué)接觸

    本文主要給大家從初學(xué)者的角度介紹了Struts2框架結(jié)構(gòu)和基本頁面代碼等內(nèi)容,一起來學(xué)習(xí)一下。
    2017-11-11
  • Java面試題沖刺第十九天--數(shù)據(jù)庫(4)

    Java面試題沖刺第十九天--數(shù)據(jù)庫(4)

    這篇文章主要為大家分享了最有價值的三道關(guān)于數(shù)據(jù)庫的面試題,涵蓋內(nèi)容全面,包括數(shù)據(jù)結(jié)構(gòu)和算法相關(guān)的題目、經(jīng)典面試編程題等,感興趣的小伙伴們可以參考一下
    2021-08-08
  • java使用ArrayList遍歷及效率比較實例分析

    java使用ArrayList遍歷及效率比較實例分析

    這篇文章主要介紹了java使用ArrayList遍歷及效率比較,實例分析了ArrayList遍歷的方法與使用技巧,具有一定參考借鑒價值,需要的朋友可以參考下
    2015-07-07
  • Java編程用指定字符打印菱形實例

    Java編程用指定字符打印菱形實例

    本文主要介紹了用指定的字符打印菱形的方法實例,一個簡單容日上手的小程序,喜歡的朋友可以拿來練習(xí)一下。
    2017-09-09

最新評論