【SpringBoot 2】(七)請求處理——映射 常用注解 方法參數的小技巧

寫在前面在這里插入圖片描述🛫更多知識總結見SpringBoot 2專欄
🚕本篇知識點總結自尚硅谷雷神的視頻
🚒博主對于該知識尚在學習階段
🚄如果發現存在問題請毫不吝嗇的指出
🚀🚀扎哇太棗糕的博客首頁🚀🚀

文章目錄

  • 1 請求映射
    • 1.1 Rest風格
    • 1.2 表單提交Rest的原理
    • 1.3請求映射的原理
  • 2 請求處理常用注解
    • 2.1 @RequestParam
    • 2.2 @PathVariable
    • 2.3 @RequestHeader
    • 2.4 @RequestBody
    • 2.5 @RequestAttribute
    • 2.5 @RequestAttribute
  • 3 方法參數小技巧
    • 3.1 復雜參數屬性值
    • 3.2 自定義參數實現數據綁定

1 請求映射

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

1.1 Rest風格

??Rest風格就是使用HTTP請求方式動詞來表示對資源的增刪改查等操作,比如:GET查找用戶DELETE刪除用戶PUT更改用戶 POST添加用戶。具體使用如下:
在這里插入圖片描述??但是前端form表單的method只有POST、GET兩種方法,如何使用PUT、DELETE兩種方法呢?這就使用到了HiddenHttpMethodFilter,在源碼的WebMvcAutoConfiguration自動配置類中使用OrderedHiddenHttpMethodFilter方法(方法源碼在下面),其中返回它同名類對象,該類向上兩層的父類HiddenHttpMethodFilter中定義了如何使用PUT、DELETE兩種方法(源碼見下面圖片)

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

在這里插入圖片描述??了解源碼的規范之后,讓我們試著進行編碼,總結上述文字得知:若想使用Rest風格的請求,需要進行兩步操作配置文件中開啟隱藏方法過濾器(據說高版本的SpringBoot源碼中默認是開啟的)form表單的method為POST并加入_method的值為相應的PUT、DELETE
在這里插入圖片描述

1.2 表單提交Rest的原理

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

?? 像form表單的method只有POST、GET兩個值的情況需要將配置文件中的隱藏方法過濾器開啟,別的如PostMan直接發送Put、delete等方式請求就無需使用HiddenHttpMethodFilter
? ?根據四種配置演變出的四個新注解在這里插入圖片描述? ?自定義_method名稱的方法:自定義一個webConfig類類中來創建一個HiddenHttpMethodFilter方法,調用它的setMethodFilter方法即可實現定制在這里插入圖片描述

1.3請求映射的原理

??SpringBootSpringMVC一樣,前端發送的所有請求都一定會到DispatcherServlet中,而DispatcherServlet本身就是一個servlet繼承自HttpServlet。一個servlet必定會重寫doGet和doPost方法,于是通過對源碼進行分析發現在HttpServlet的子類FrameworkServlet(它同時也是DispatcherServlet的父類)中重寫了doGet和doPost方法,并且重寫之后的doXxx方法都是調用了本類的processRequest方法,這個方法的底層又調用了本類的doService抽象方法,抽象方法沒有方法體,繼承該類的子類必須重寫該方法,于是乎在它的子類中找到了重寫之后的doService方法,這個方法中除了前面一大堆的初始化之外調用本類的doDispatch方法(這個才是最重要的一個方法)在這里插入圖片描述
??從上文的析得知,SpringMVC的功能都要從DispatcherServlet類的doDispatch方法中分析得出,此方法使用getHandler(processedRequest)有參構造器里的對獲取到的所有請求使用for循環逐個匹配下面的handlerMappings,而前兩個都是在WebMvcAutoConfiguration自動配置類中配置過的。
在這里插入圖片描述

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

2 請求處理常用注解

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

2.1 @RequestParam

??@RequestParam注解用來獲取請求參數的值在這里插入圖片描述

2.2 @PathVariable

??在Restful請求風格中,通常使用路徑的方式進行參數的傳遞,@PathVariable注解就是用來獲取url路徑中參數的值在這里插入圖片描述

2.3 @RequestHeader

??@RequestHeader注解用來獲取請求頭的值在這里插入圖片描述

2.4 @RequestBody

??@RequestBody注解用來獲取請求體的值
在這里插入圖片描述

2.5 @RequestAttribute

??@RequestAttribute用來獲取request域的值,兩種獲取方式:直接@RequestAttribute注解 HttpServletRequest對象的getAttribute方法。這個注解無法使用map獲取所有的值在這里插入圖片描述

2.5 @RequestAttribute

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

第一步: SpringBoot默認禁用矩陣變量,可通過自定義配置類向容器注冊WebMvcConfigurer組件替代默認的組件來開啟矩陣變量在這里插入圖片描述第二步: 分單矩陣和多矩陣兩種用法在這里插入圖片描述在這里插入圖片描述

3 方法參數小技巧

3.1 復雜參數屬性值

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

3.2 自定義參數實現數據綁定

??頁面提交的請求數據(GET、POST)都可以和自定義對象參數的屬性(也就是POJO類的參數)進行綁定在這里插入圖片描述

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/535099.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/535099.shtml
英文地址,請注明出處:http://en.pswp.cn/news/535099.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

北方人思想為什么落后_廣西人為什么很少到北方打工?

廣西雖然山青水秀,環境優美,但目前還是個經濟欠發達的地區,很多人在本地很難找到合適的工作,所以紛紛選擇外出打工了,包括我自己。在廣西外出打工的人群當中,絕大部分人都去了廣東,當然&#xf…

刷網絡課_網絡營銷實踐心得—劉薈萌

一、實踐時間2020.9.1~2020.12.25二、實踐內容1、實踐資源準備:實踐平臺賬號注冊、了解相關網站的使用方法。2、認識網絡營銷系統:企業網絡營銷信息源類別及傳遞渠道調查。3、信息源構建:微信公眾號運營、新媒體平臺運營(微博、博客)4、網絡推…

【SpringBoot 2】(八)數據響應 頁面響應

寫在前面🛫更多知識總結見SpringBoot 2專欄 🚕本篇知識點總結自尚硅谷雷神的視頻 🚒博主對于該知識尚在學習階段 🚄如果發現存在問題請毫不吝嗇的指出 🚀🚀扎哇太棗糕的博客首頁🚀🚀…

2020年最快的dns_2020年哪里換旅行證最快取證?需要幾天?

關注我的都知道了很多的實用攻略你還在等什么~美媽不論去哪個地方更換旅行證,都喜歡問“這個地方是否可以加急?”“最快幾天可以拿到新的旅行證?”今天就來整理一下2020年各地換證需要幾天,是否可以加急。"目前更換旅行證有兩…

語句拼接_Linux 進階語句

日常工作需要用到,shell語句用于分析定位生產問題,本次做個記錄# 將日志先拷貝到當前目錄cp /tmp/nginx.log .本次目標是: 找出log中的404 500的報錯#使用管道取出相關日志less nginx.log 通過/ 查詢得知 狀態碼處于第9個字段#使用 awk 篩選出…

【SpringBoot 2】(九)異常處理 web原生組件的注入

寫在前面🛫更多知識總結見SpringBoot 2專欄 🚕本篇知識點總結自尚硅谷雷神的視頻 🚒博主對于該知識尚在學習階段 🚄如果發現存在問題請毫不吝嗇的指出 🚀🚀扎哇太棗糕的博客首頁🚀🚀…

項目管理最佳實踐方法_項目管理最佳實踐,企業如何進行有效的項目管理

前言:企業在劃分項目時,可按照項目的復雜程度、管理范圍等將項目分為三個級別,分別是企業級、部門級和小組級(與目標劃分原則相同),然后將每一級的目標與項目對應起來。我們知道,企業制定的目標…

python 歷遍子彈_python之子彈移動

"""新增功能:完成我方坦克發射子彈的移動"""import pygameimport timeimport randomwin_width 700win_height 500bg_color pygame.Color(0, 0, 0)text_color pygame.Color(255, 0, 0)class MainGame():window Nonemy_tank None…

【SpringBoot 2】(十)數據庫相關

寫在前面🛫更多知識總結見SpringBoot 2專欄 🚕本篇知識點總結自尚硅谷雷神的視頻 🚒博主對于該知識尚在學習階段 🚄如果發現存在問題請毫不吝嗇的指出 🚀🚀扎哇太棗糕的博客首頁🚀🚀…

線性分組碼的最小漢明距為6_第二章 線性代數

2.1 標量、向量、矩陣和張量標量(scalar)一個標量就是一個單獨的數,用斜體表示標量。向量(vector)一個向量是一列有序排列的數,用粗寫的小寫字母表示。矩陣(matrix)矩陣式一個二維數組,其中的么一個元素由兩個索引(而非一個)所確定&#xff0…

【SpringBoot 2】(十一)單元測試JUnit 5 指標監控

寫在前面🛫更多知識總結見SpringBoot 2專欄 🚕本篇知識點總結自尚硅谷雷神的視頻 🚒博主對于該知識尚在學習階段 🚄如果發現存在問題請毫不吝嗇的指出 🚀🚀扎哇太棗糕的博客首頁🚀🚀…

sklearn中lstm_分別用sklearn和tensorflow做房價預測

原標題:分別用sklearn和tensorflow做房價預測本篇是后面用tensorflow做回歸時的一個參照,忍不住要說的是sklearn真是簡單好用,要不是他沒有卷積cnn等時髦模型,真是不想用其他家的了。經典的sklearn集成模型結果:真是又…

多個containers 共用一個pvc_2020阜新PVC-UH市政管廠家-煙臺塑膠

2020阜新PVC-UH市政管廠家煙臺金沃泉塑膠有限公司主要產品PVC-U、PVC-M、PVC-UH聚氯乙烯給給水管材、HDPE高密度聚乙烯給水管材、CPVC氯化聚氯乙烯、MPP高壓電力電纜護套管、PERT-Ⅱ型熱力管道、高分子托輥管、水處理膜殼管。公司為電網、南方電網、電建集團、建筑集團、五礦集…

【SpringBoot 2】(十二) profile功能 自定義starter

寫在前面🛫更多知識總結見SpringBoot 2專欄 🚕本篇知識點總結自尚硅谷雷神的視頻 🚒博主對于該知識尚在學習階段 🚄如果發現存在問題請毫不吝嗇的指出 🚀🚀扎哇太棗糕的博客首頁🚀🚀…

jpa transaction 回滾_我遇到的JPA中事務回滾的問題

在最近的項目中,做的是解析XML文件,解析過程中會有異常,比如:XML文件中節點的數據和與之對應的數據庫的字段中數據的類型不匹配;XML中數據長度超過數據庫定義的長度;有數據了的重復插入問題;讀取…

pb 怎么判斷是 小數_考試90分以上的孩子是怎么學數學的?聽聽老師怎么說?

一二年級,考試上九十分很輕松。但是,不少小朋友一上三年級,成績就落下來了。那么,我們來看看三年級起,考試還能夠保持在90分以上的孩子是怎么學習數學的吧!第一,計算能力過關通過這兩張圖片的對…

快速上手Mybatis-Plus 入門案例

寫在前面🛫更多知識總結見Mybatis-Plus專欄 🚕內容總結自尚硅谷楊博超老師的視頻 🚒博主對于該知識尚在學習階段 🚄如果發現存在問題請毫不吝嗇的指出 🚀🚀扎哇太棗糕的博客首頁🚀🚀…

交換機分布緩存_網絡交換機緩存在數據中心的作用

什么產生了緩存?網絡交換機要配置多少緩存才夠用?緩存容量是否有標準可以衡量? 當網絡交換機接口收到超出其所能處理的流量后,它會選擇要么將其緩存,或者將其丟棄。 緩存通常都是因為網絡接口速率不同造成的&#xff0…

黑蘋果 選擇語言 點不了_什么是天然的“黑鉆”?—科普貼

天然黑鉆也被成為“碳酸氫”,具有與白鉆相同的化學成分,然而黑鉆石的晶體結構是不同的,這意味著它們由許多小晶體組成,它們以隨機的形式粘在一起,而不是一個具有可識別自然線的固體錐形。天然黑鉆石有極高的含物&#…

sim卡沒壞但蘋果手機無服務_解決手機插SIM卡后都顯示“無SIM卡”的故障問題

故障現象顧客描述手機插SIM卡后都顯示“無SIM卡”。維修過程引起插入SIM卡卻顯示“無SIM卡”的故障,除了可能是SIM卡座的供電、時鐘、復位及SIM卡插入檢測信號不正常導致外,還有可能是基帶不正常導致的。插上手機卡,左上角提示“無SIM卡”&am…