Spring根據(jù)URL參數(shù)進(jìn)行路由的方法詳解
前言
本文主要介紹了關(guān)于Spring根據(jù)URL參數(shù)進(jìn)行路由的相關(guān)內(nèi)容,分享出來供大家參考學(xué)習(xí)價(jià)值,下面來一起看看詳細(xì)的介紹吧。
發(fā)現(xiàn)問題
最近在寫接口的時(shí)候發(fā)現(xiàn)一個(gè)問題,就是兩個(gè)REST接口的URL的path部分是一樣的,根據(jù)query傳入不同的參數(shù)來區(qū)分。
比如S3普通上傳接口是是:
PUT /{bucketname}/{ objectname}
分塊上傳的接口是:
PUT /{bucketname}/{objectname}?partNumber={partNumber}&uploadId={uploadId}
傳入partNumber和uploadId是一個(gè)接口,沒有傳入這兩個(gè)參數(shù)是另外一個(gè)接口,那Spring中要如何進(jìn)行路由設(shè)置呢?
一般我們?cè)O(shè)置路由都是@RequestMapping(value = "/xx", method = RequestMethod.GET)
。然后在方法簽名中可以通過@RequestParam注入?yún)?shù)。
但是直接通過注入不同的參數(shù)來實(shí)現(xiàn)區(qū)分是不行的,比如:
@ResponseBody @RequestMapping(value = "/xx", method = RequestMethod.GET) public String get1(){ return "get1"; } @ResponseBody @RequestMapping(value = "/xx", method = RequestMethod.GET) public String get2(@RequestParam name){ return "get2" + name; }
這樣會(huì)報(bào)錯(cuò):
java.lang.IllegalStateException: Ambiguous mapping. Cannot map 'DemoController_v01' method public java.lang.String com.nd.sdp.ndss.controller.v01.DemoController.get1() to {[/demo/xx],methods=[GET]}: There is already 'DemoController_v01' bean method
解決方法
意思是重復(fù)注冊(cè)了,所以@RequestParam是不能用來作為路由依據(jù)的。
@RequestParam
用來處理Content-Type: 為 application/x-www-form-urlencoded編碼的內(nèi)容。(Http協(xié)議中,如果不指定Content-Type,則默認(rèn)傳遞的參數(shù)就是application/x-www-form-urlencoded類型)
RequestParam可以接受簡單類型的屬性,也可以接受對(duì)象類型。
實(shí)質(zhì)是將Request.getParameter() 中的Key-Value參數(shù)Map利用Spring的轉(zhuǎn)化機(jī)制ConversionService配置,轉(zhuǎn)化成參數(shù)接收對(duì)象或字段。
@RequestMapping作為路由注解,除了常用的value字段用于設(shè)置url外,還提供了params參數(shù),可以指定如何匹配url中query的參數(shù)。又幾種配置方法:
- myParam=myValue匹配有myParam參數(shù),并且等于myValue的url
- myParam!=myValue匹配有myParam參數(shù),并且不等于myValue的url
- myParam匹配有myParam參數(shù)的url
- !myParam匹配沒有myParam參數(shù)的url
這樣就可以很靈活的指定路由了。
而且@RequestMapping還提供了headers參數(shù),可以讓我們根據(jù)Header的情況進(jìn)行路由!
總結(jié)
以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,如果有疑問大家可以留言交流,謝謝大家對(duì)腳本之家的支持。
相關(guān)文章
spring?boot集成redisson的最佳實(shí)踐示例
這篇文章主要為大家介紹了spring?boot集成redisson的最佳實(shí)踐示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-03-03Java Web實(shí)現(xiàn)添加定時(shí)任務(wù)的方法示例
這篇文章主要介紹了Java Web實(shí)現(xiàn)添加定時(shí)任務(wù)的方法,涉及java web定時(shí)任務(wù)控制類定義、調(diào)用及監(jiān)聽器定義、添加等相關(guān)操作技巧,需要的朋友可以參考下2018-01-01如何在Spring?Boot中使用OAuth2認(rèn)證和授權(quán)
這篇文章主要介紹了如何在Spring?Boot中使用OAuth2認(rèn)證和授權(quán)的相關(guān)資料,OAuth2.0是一種開放的授權(quán)協(xié)議,它允許用戶授權(quán)第三方應(yīng)用訪問其賬戶(或資源),而無需共享其用戶賬戶憑據(jù),需要的朋友可以參考下2023-12-12springcloud gateway自定義斷言規(guī)則詳解,以后綴結(jié)尾進(jìn)行路由
這篇文章主要介紹了springcloud gateway自定義斷言規(guī)則詳解,以后綴結(jié)尾進(jìn)行路由,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-10-10Springboot+MybatisPlus實(shí)現(xiàn)帶驗(yàn)證碼的登錄
本文主要介紹了Springboot+MybatisPlus實(shí)現(xiàn)帶驗(yàn)證碼的登錄,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2024-05-05