最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

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

1 請(qǐng)求映射

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

1.1 Rest風(fēng)格

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

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

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

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

1.2 表單提交Rest的原理

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

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

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

1.3請(qǐng)求映射的原理

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

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

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

2 請(qǐng)求處理常用注解

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

2.1 @RequestParam

??@RequestParam注解用來(lái)獲取請(qǐng)求參數(shù)的值

2.2 @PathVariable

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

2.3 @RequestHeader

??@RequestHeader注解用來(lái)獲取請(qǐng)求頭的值

2.4 @RequestBody

??@RequestBody注解用來(lái)獲取請(qǐng)求體的值

2.5 @RequestAttribute

??@RequestAttribute用來(lái)獲取request域的值,兩種獲取方式:①直接@RequestAttribute注解 ②HttpServletRequest對(duì)象的getAttribute方法。這個(gè)注解無(wú)法使用map獲取所有的值

2.6 @RequestAttribute

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

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

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

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

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

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

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

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

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

相關(guān)文章

  • Spring?Boot集成Milvus快速入門demo示例詳解

    Spring?Boot集成Milvus快速入門demo示例詳解

    Milvus是一種高性能向量數(shù)據(jù)庫(kù),支持從筆記本到大型分布式系統(tǒng)的多環(huán)境運(yùn)行,它以開(kāi)源和云服務(wù)形式提供,是LFAI & Data Foundation的項(xiàng)目,采用Apache 2.0許可,Milvus特別支持高并行化和解耦的系統(tǒng)架構(gòu),使其能夠隨數(shù)據(jù)增長(zhǎng)而擴(kuò)展,支持各種復(fù)雜搜索功能,滿足企業(yè)級(jí)AI應(yīng)用需求
    2024-09-09
  • 基于多線程中join()的用法實(shí)例講解

    基于多線程中join()的用法實(shí)例講解

    下面小編就為大家?guī)?lái)一篇基于多線程中join()的用法實(shí)例講解。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-10-10
  • JavaSE基礎(chǔ)之反射機(jī)制(反射Class)詳解

    JavaSE基礎(chǔ)之反射機(jī)制(反射Class)詳解

    反射機(jī)制有什么用?通過(guò)java語(yǔ)言中的反射機(jī)制可以操作字節(jié)碼文件,可以讀和修改字節(jié)碼文件。所以本文將為大家講講反射機(jī)制的使用,需要的可以參考一下
    2022-09-09
  • Java中char數(shù)組(字符數(shù)組)與字符串String類型的轉(zhuǎn)換方法

    Java中char數(shù)組(字符數(shù)組)與字符串String類型的轉(zhuǎn)換方法

    這篇文章主要介紹了Java中char數(shù)組(字符數(shù)組)與字符串String類型的轉(zhuǎn)換方法,涉及Java中toCharArray與valueOf方法的使用技巧,需要的朋友可以參考下
    2015-12-12
  • Spring?Data?JPA實(shí)現(xiàn)查詢結(jié)果返回map或自定義的實(shí)體類

    Spring?Data?JPA實(shí)現(xiàn)查詢結(jié)果返回map或自定義的實(shí)體類

    這篇文章主要介紹了Spring?Data?JPA實(shí)現(xiàn)查詢結(jié)果返回map或自定義的實(shí)體類,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-12-12
  • Spring動(dòng)態(tài)注冊(cè)多數(shù)據(jù)源的實(shí)現(xiàn)方法

    Spring動(dòng)態(tài)注冊(cè)多數(shù)據(jù)源的實(shí)現(xiàn)方法

    這篇文章主要介紹了Spring動(dòng)態(tài)注冊(cè)多數(shù)據(jù)源的實(shí)現(xiàn)方法,小編覺(jué)的挺不錯(cuò)的,現(xiàn)分享到腳本之家平臺(tái),需要的朋友可以參考下
    2018-01-01
  • Java實(shí)現(xiàn)單人信息管理程序

    Java實(shí)現(xiàn)單人信息管理程序

    這篇文章主要為大家詳細(xì)介紹了Java實(shí)現(xiàn)單人信息管理程序,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-02-02
  • Java CAS底層實(shí)現(xiàn)原理實(shí)例詳解

    Java CAS底層實(shí)現(xiàn)原理實(shí)例詳解

    這篇文章主要介紹了Java CAS底層實(shí)現(xiàn)原理實(shí)例詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-01-01
  • dubbo?filter中有關(guān)bean注入和配置文件讀取方式

    dubbo?filter中有關(guān)bean注入和配置文件讀取方式

    這篇文章主要介紹了dubbo?filter中有關(guān)bean注入和配置文件讀取方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-05-05
  • IDEA 格式化SQL代碼技巧分享

    IDEA 格式化SQL代碼技巧分享

    這篇文章主要介紹了IDEA 格式化SQL代碼技巧分享,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2021-02-02

最新評(píng)論

融水| 巴南区| 迁西县| 太白县| 房产| 固阳县| 崇礼县| 平谷区| 子洲县| 营山县| 黎川县| 本溪市| 台南县| 凭祥市| 威远县| 奉化市| 香港 | 澄城县| 绿春县| 黄石市| 贡嘎县| 随州市| 定西市| 九寨沟县| 铜鼓县| 怀来县| 连州市| 松滋市| 阿克| 灵川县| 镶黄旗| 罗定市| 松原市| 红河县| 通榆县| 台山市| 米泉市| 东山县| 丽江市| 镇宁| 儋州市|