SpringMVC中的@RequestMapping注解的使用詳細(xì)教程
@RequestMapping注解的功能
從注解名稱(chēng)上我們可以看出,@RequestMapping注解的作用就是將請(qǐng)求和處理請(qǐng)求的控制器方法關(guān)聯(lián)起來(lái)
,建立映射關(guān)系,SpringMVC接收到指定的請(qǐng)求,就會(huì)來(lái)找到在映射關(guān)系中對(duì)應(yīng)的控制方法來(lái)處理這個(gè)請(qǐng)求。
@RequestMapping注解的位置
@RequestMapping標(biāo)識(shí)一個(gè)類(lèi)
:設(shè)置映射請(qǐng)求的請(qǐng)求路徑的初始信息
@RequestMapping標(biāo)識(shí)一個(gè)方法
:設(shè)置映射請(qǐng)求,請(qǐng)求路徑的具體信息
如下所示:
當(dāng)前我們Protal方法的訪問(wèn)路徑是hello
package AnnotationController; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; @Controller public class ProtalController { @RequestMapping("/hello") public String Protal(){ return "index"; } }
當(dāng)前的控制層,我們只給控制層中的Protal方法加上了@RequestMapping注解,而并沒(méi)有給該控制層的類(lèi)上加,因此我們可以直接通過(guò)Protal方法上的請(qǐng)求路徑訪問(wèn)。
假設(shè)我們此時(shí)也給類(lèi)加上@RequestMapping注解,訪問(wèn)地址不變化,如下所示:
@RequestMapping("test") public class ProtalController {
訪問(wèn)結(jié)果如下所示,我們會(huì)發(fā)現(xiàn)當(dāng)前資源無(wú)法被找到
要想資源 被正確的訪問(wèn),我們需要進(jìn)行如下操作:
在路徑的具體信息之前添加路徑的初始信息,因?yàn)楫?dāng)在類(lèi)上添加了請(qǐng)求路徑的初始信息之后,我們想訪問(wèn)該類(lèi)中的某個(gè)方法,就必須先正確的訪問(wèn)到該類(lèi)。
而這樣做的目的在于,在實(shí)際開(kāi)發(fā)中,我們往往會(huì)給請(qǐng)求方法設(shè)置較為簡(jiǎn)單的路徑請(qǐng)求具體信息,例如查詢(xún)學(xué)生的方法,我們會(huì)將其請(qǐng)求路徑具體的信息設(shè)置select,刪除學(xué)生的方法,我們會(huì)將其我們會(huì)將其請(qǐng)求路徑具體的信息設(shè)置delete,而需求往往不是適合于一類(lèi)人而已,對(duì)于除學(xué)生以外的其他用戶(hù),都會(huì)有增刪的操作,這樣就導(dǎo)致了,系統(tǒng)也不知道該訪問(wèn)哪一個(gè),因此,我們需要在類(lèi)上添加請(qǐng)求路徑的初始化信息。
@RequestMapping注解value屬性值
我們通過(guò)查看@RequestMapping注解:
它的匹配方式有很多種,通過(guò)請(qǐng)求路徑,通過(guò)請(qǐng)求方法…,而比較常用的就是通過(guò)path和method
// // Source code recreated from a .class file by IntelliJ IDEA // (powered by FernFlower decompiler) // package org.springframework.web.bind.annotation; import java.lang.annotation.Documented; import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; import org.springframework.core.annotation.AliasFor; @Target({ElementType.TYPE, ElementType.METHOD}) @Retention(RetentionPolicy.RUNTIME) @Documented @Mapping public @interface RequestMapping { String name() default ""; @AliasFor("path") String[] value() default {}; @AliasFor("value") String[] path() default {}; RequestMethod[] method() default {}; String[] params() default {}; String[] headers() default {}; String[] consumes() default {}; String[] produces() default {}; }
@RequestMapping注解value屬性
通過(guò)查看源碼可知,value的類(lèi)型為String[],如下所示:
我們將@RequestMapping的值設(shè)置為多個(gè)
package AnnotationController; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; @Controller public class ProtalController { //當(dāng)匹配方式中只有value時(shí),value可以省略不寫(xiě) @RequestMapping({"/hello","/abc"}) public String Protal(){ return "index"; } }
那么我們是否可以根據(jù)數(shù)組中任意的一個(gè)值來(lái)訪問(wèn)到正確的資源呢?
我們將項(xiàng)目重新部署:
由此可知,@RequestMapping注解value屬性的作用是
:通過(guò)請(qǐng)求的請(qǐng)求路徑匹配請(qǐng)求
,value屬性是數(shù)組類(lèi)型
,即當(dāng)前瀏覽器所發(fā)送請(qǐng)求的請(qǐng)求路徑匹配value屬性中的任何一個(gè)值,則當(dāng)前請(qǐng)求就會(huì)被注解所標(biāo)識(shí)的方法進(jìn)行處理
@RequestMapping注解method屬性
通過(guò)查看源碼如下所示,我們知道m(xù)ethod屬性是ReuestMethod類(lèi)型的:
RequestMethod[] method() default {<!-- -->};
繼續(xù)跟進(jìn)查看ReuestMethod的源碼,如下所示:
// // Source code recreated from a .class file by IntelliJ IDEA // (powered by FernFlower decompiler) // package org.springframework.web.bind.annotation; public enum RequestMethod { GET, HEAD, POST, PUT, PATCH, DELETE, OPTIONS, TRACE; private RequestMethod() { } }
我們發(fā)現(xiàn)它是一個(gè)枚舉類(lèi)型,列舉了所有的請(qǐng)求方式,其中g(shù)et和post是我們已經(jīng)學(xué)過(guò)的,那么接下來(lái)我們就以post和get請(qǐng)求為例演示起作用。
創(chuàng)建實(shí)現(xiàn)頁(yè)面跳轉(zhuǎn)的模塊
首頁(yè)請(qǐng)求控制器:
package AnnotationController; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; @Controller public class ProtalController { @RequestMapping("/") public String Protal(){ return "index"; } }
跳轉(zhuǎn)頁(yè)面請(qǐng)求控制器
package AnnotationController; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; @Controller public class JumpPageController { @RequestMapping(value = {"/hello","/abc"},method= RequestMethod.GET) public String Page(){ return "success"; } }
index.html
<!DOCTYPE html> <html lang="en" xmlns:th="http://www.thymeleaf.org"> <head> <meta charset="UTF-8"> <title>首頁(yè)</title> </head> <body> <h1>成功進(jìn)入首頁(yè)!</h1> <a th:href="@{/hello}">測(cè)試@RequestMapping注解所標(biāo)識(shí)的位置</a><br> <a th:href="@{/abc}">測(cè)試@RequestMapping注解的value屬性</a><br> <form th:action="@{/hello}"> <input type="submit" value="測(cè)試@RequestMapping注解的method屬性"> </form> </body> </html>
success.html
<!DOCTYPE html> <html lang="en" xmlns:th="http://www.thymeleaf.org"> <head> <meta charset="UTF-8"> <title>成功</title> </head> <body> <h1>成功進(jìn)入!</h1> </body> </html>
此時(shí)運(yùn)行服務(wù)器,如下所示:
點(diǎn)擊其中的任何一個(gè)連接,都會(huì)出現(xiàn)如下字樣:
通過(guò)輸出結(jié)果,我們不難發(fā)現(xiàn)將@RequestMapping注解中的method屬性值設(shè)置為RequestMethod.GET,也就是匹配get請(qǐng)求的方式是沒(méi)有任何問(wèn)題的,那么如果我們將其匹配的是post還會(huì)如此嗎?
修改@RequestMapping注解中的method屬性值為RequestMethod.POST,再次運(yùn)行:
出現(xiàn)下述異常:
tomcat告訴我們是因?yàn)榉椒ú槐恢С?/p>
那為什么當(dāng)我們將將@RequestMapping注解中的method屬性值設(shè)置為RequestMethod.GET就能正確的處理請(qǐng)求?原因是:無(wú)論是超鏈接還是表單,默認(rèn)的提交方式都是get請(qǐng)求,因此當(dāng)我們沒(méi)有設(shè)置其值的情況情況下,默認(rèn)的就是get請(qǐng)求方式
我們可以將表單的提交方式設(shè)置為POST,這樣就可以處理POST請(qǐng)求了:
<form th:action="@{/hello}" method="post"> <input type="submit" value="測(cè)試@RequestMapping注解的method屬性"> </form>
如下所示,通過(guò)method屬性,將其表單提交的方式設(shè)置為post
此時(shí)點(diǎn)擊該按鈕就可以成功的進(jìn)入success.html頁(yè)面啦
但是需要注意的是,如果我們把當(dāng)前可以訪問(wèn)成功的地址復(fù)制,直接在瀏覽器中訪問(wèn),如下所示:
還是出現(xiàn)了405錯(cuò)誤,原因是我們將地址復(fù)制直接通過(guò)地址欄訪問(wèn),實(shí)際上是get請(qǐng)求,但是我們又在注解中將其請(qǐng)求方法設(shè)置為post請(qǐng)求,由于未能匹配,所以出現(xiàn)了405錯(cuò)誤
通過(guò)查看它的源碼,我們得知其method是一個(gè)數(shù)組類(lèi)型的,那么我們就可以利用這一特性,讓它既能匹配get請(qǐng)求,又能匹配post請(qǐng)求,設(shè)置如下所示:
@RequestMapping(value = {"/hello","/abc"},method= {RequestMethod.POST,RequestMethod.GET})
此時(shí)我們刷新剛剛復(fù)制地址,而導(dǎo)致報(bào)錯(cuò)的頁(yè)面,就能成功訪問(wèn)啦,只要是get、post中的任意一個(gè)都能被成功訪問(wèn)
@RequestMapping注解的method屬性
的作用是通過(guò)請(qǐng)求的請(qǐng)求方式匹配請(qǐng)求,它RequestMethod類(lèi)型的數(shù)組
,即當(dāng)前瀏覽器所發(fā)送請(qǐng)求的請(qǐng)求方式匹配method屬性中的任何一個(gè)請(qǐng)求,如果匹配成功,那么當(dāng)前請(qǐng)求就會(huì)被注解所標(biāo)識(shí)的方法進(jìn)行處理,若瀏覽器所發(fā)送的請(qǐng)求的請(qǐng)求路徑和@RequestMapping注解value屬性匹配,但是請(qǐng)求方式不匹配,頁(yè)面會(huì)報(bào)錯(cuò),如下所示:
在@ResquestMapping的基礎(chǔ)上,結(jié)合請(qǐng)求方式的一些派生注解:
@GetMapping,@PostMapping,@DeleteMapping,@PutMapping,關(guān)于這些注解在后續(xù)的學(xué)習(xí)中會(huì)使用。
@RequestMapping注解params屬性
String[] params() default {<!-- -->};
@RequestMapping注解params屬性的作用是通過(guò)請(qǐng)求的請(qǐng)求參數(shù)匹配請(qǐng)求,即瀏覽器發(fā)送的請(qǐng)求的請(qǐng)求參數(shù)必須滿足params屬性的設(shè)置
,params可以使用四種表達(dá)式:
“param”:表示當(dāng)前所匹配請(qǐng)求的請(qǐng)求參數(shù)中必須攜帶param參數(shù)
測(cè)試如下所示:
在注解中,我們添加param屬性,并給定一個(gè)值為username
package AnnotationController; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; @Controller public class JumpPageController { @RequestMapping(value = {"/hello","/abc"}, method= {RequestMethod.POST,RequestMethod.GET} ,params = {"username"}) public String Page(){ return "success"; } }
再重新進(jìn)行項(xiàng)目的部署,點(diǎn)擊超鏈接或者表單中的按鈕,出現(xiàn)以下錯(cuò)誤:
原因是,我們?cè)谧⒔庵性O(shè)置了其參數(shù)的值,而在地址欄中并沒(méi)有該參數(shù)的值,所以會(huì)報(bào)錯(cuò)。
解決方法如下所示:
<!--以下兩種方式毫無(wú)區(qū)別,唯一的區(qū)別是第一種寫(xiě)法在源文件中會(huì)報(bào)錯(cuò),但是該報(bào)錯(cuò)不影響代碼的編譯和執(zhí)行 --> <a th:href="@{/hello?username=admin}" >測(cè)試@RequestMapping注解的param屬性</a><br> <a th:href="@{/hello(username='admin')}" >測(cè)試@RequestMapping注解的param屬性</a>
通過(guò)這種方式,瀏覽器會(huì)在地址欄自動(dòng)為我們添加其值,如下所示:
此時(shí)頁(yè)面也能被成功的訪問(wèn)到!
但需要注意的是,param屬性和method屬性以及value屬性可不一樣哦,當(dāng)我們將method屬性和value屬性中設(shè)置有多個(gè)值時(shí),只要能匹配到其中的任意一個(gè)即可,但是對(duì)于param屬性來(lái)說(shuō),如果設(shè)置的值有多個(gè)必須同時(shí)匹配,測(cè)試如下:
給param屬性值增加password,其他地方不做任何的變動(dòng)
@RequestMapping(value = {"/hello","/abc"}, method= {RequestMethod.POST,RequestMethod.GET} ,params = {"username","password"})
測(cè)試結(jié)果如下所示:
此時(shí)報(bào)錯(cuò)原因依然為在注解中設(shè)置了Parma屬性值password,但是未能匹配到該值,所以出現(xiàn)錯(cuò)誤,解決方法有兩種,一種是我們?cè)趆tml文件中設(shè)置該參數(shù),由瀏覽器自動(dòng)為我們匹配,如下所示:
index.html:
<a th:href="@{/hello(username=${admin},password=${1234})}" >測(cè)試@RequestMapping注解的param屬性</a> <a th:href="@{/hello(username='admin',password='12345')}">測(cè)試@RequestMapping注解的param屬性</a>
重新部署項(xiàng)目,運(yùn)行如下所示:
第二種方式是我們?cè)诘刂窓谕ㄟ^(guò)手動(dòng)添加缺失的參數(shù),如下所示:
也可以成功進(jìn)入到我們想訪問(wèn)的頁(yè)面!
“!param”:表示當(dāng)前所匹配請(qǐng)求的請(qǐng)求參數(shù)中一定不能攜帶param參數(shù)
假設(shè)此時(shí)我們將注解修改如下所示:
請(qǐng)求參數(shù)中不可以包含password,即使是只有password這個(gè)參數(shù),沒(méi)有值也不可以。
@RequestMapping(value = {"/hello","/abc"}, method= {RequestMethod.POST,RequestMethod.GET} ,params = {"username","!password"})
重新部署項(xiàng)目如下所示,我們手動(dòng)在地址欄添加了password,雖然只是添加了該參數(shù)沒(méi)有給定具體的值,結(jié)果也報(bào)錯(cuò)了。
“param=value”:表示當(dāng)前所匹配請(qǐng)求的請(qǐng)求參數(shù)中必須攜帶param參數(shù)且值必須為value
假設(shè)此時(shí)我們將注解修改如下所示:
添加請(qǐng)求參數(shù),并將其值設(shè)置為20
@RequestMapping(value = {"/hello","/abc"}, method= {RequestMethod.POST,RequestMethod.GET} ,params = {"username","!password","age=20"})
重新部署項(xiàng)目,如下所示,只有當(dāng)注解中的設(shè)置的所有請(qǐng)求參數(shù)都被滿足時(shí),該請(qǐng)求才能被正確處理
“param!=value”:表示當(dāng)前所匹配請(qǐng)求的請(qǐng)求參數(shù)中可以不攜帶param,若攜帶值一定不能是value
假設(shè)此時(shí)我們將注解修改如下所示:
添加新的請(qǐng)求參數(shù)gender,并設(shè)置其值不能為男
@RequestMapping(value = {"/hello","/abc"}, method= {RequestMethod.POST,RequestMethod.GET} ,params = {"username","!password","age=20","gender!=男"})
重新部署項(xiàng)目,測(cè)試如下所示:
手動(dòng)添加其參數(shù)的值,gender的值可以是除了男以外的任何值,當(dāng)然也可以不傳值,或者不手動(dòng)在地址欄添加該請(qǐng)求參數(shù)均可
@RequestMapping注解headers屬性
String[] headers() default {<!-- -->};
@RequestMapping注解的headers屬性
通過(guò)請(qǐng)求的請(qǐng)求頭信息匹配請(qǐng)求映射,它是一個(gè)字符串類(lèi)型的數(shù)組,可以通過(guò)四種表達(dá)式設(shè)置請(qǐng)求頭信息和請(qǐng)求映射的匹配關(guān)系,如下所示:
"header"
:要求請(qǐng)求映射所匹配的請(qǐng)求必須攜帶header請(qǐng)求頭信息
"!header"
:要求請(qǐng)求映射所匹配的請(qǐng)求必須不能攜帶header請(qǐng)求頭信息
"header=value"
:要求請(qǐng)求映射所匹配的請(qǐng)求必須攜帶header請(qǐng)求頭信息且header=value
"header!=value"
:要求請(qǐng)求映射所匹配的請(qǐng)求必須攜帶header請(qǐng)求頭信息且header!=value
若當(dāng)前請(qǐng)求滿足@RequestMapping注解的value和method屬性,但是不滿足headers屬性
,此時(shí)頁(yè)面顯示404錯(cuò)誤
,即資源未找到
例如:我們可以通過(guò)設(shè)置headers的referer屬性來(lái)指明當(dāng)前資源的來(lái)源地址,如下所示:
@RequestMapping(value = {"/hello","/abc"}, method= {RequestMethod.POST,RequestMethod.GET},headers = {"referer"})
重新部署項(xiàng)目,在瀏覽器中右擊打開(kāi)檢查,如下所示為我們?yōu)辄c(diǎn)擊該超鏈接的請(qǐng)求頭信息:
此時(shí)我們點(diǎn)擊該超鏈接,如下圖所示,與上圖不同之處在于多了一個(gè)Referer屬性,而該屬性的值即為該頁(yè)面的來(lái)源地址
注意:響應(yīng)頭和請(qǐng)求頭中的鍵不區(qū)分大小寫(xiě),但是其鍵值區(qū)分大小寫(xiě)
@RequestMapping注解使用ant風(fēng)格的路徑
?:表示任意的單個(gè)字符
舉例如下:
**第一步:**編寫(xiě)新的測(cè)試方法,并將其RequestMapping的值設(shè)置為/a?a/test/ant
package AnnotationController; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; @Controller public class JumpPageController { @RequestMapping("/a?a/test/ant") public String testAnt(){ return "success"; } }
第二步:在index.html中為其添加超鏈接
<a th:href="@{/aaa/test/ant}">測(cè)試@RequestMapping注解支持ant風(fēng)格的路徑</a><br>
將項(xiàng)目重新部署,測(cè)試結(jié)果如下:
點(diǎn)擊該超鏈接:
通過(guò)我們?cè)趇ndex.html文件中設(shè)置的路徑,此時(shí)資源被正確的訪問(wèn)到,既然?是代表一個(gè)任意的字符,那么我們可以將a和a中鍵的位置任意選擇一個(gè)符號(hào)來(lái)代替,可以是數(shù)字,可以是其他字母,當(dāng)然也可以是特殊字符,但是需要注意不能是英文的問(wèn)號(hào),中文的問(wèn)號(hào)是可以的,否則如下所示:
原因是**?前面是請(qǐng)求路徑,問(wèn)號(hào)后面是請(qǐng)求參數(shù)**,/a?a/test/ant并不會(huì)被當(dāng)做一個(gè)完整的請(qǐng)求路徑,其替代?的字符也不能是/,因?yàn)樗淼刂返姆指舴?,表示新的一層目?/strong>
*:表示任意的0個(gè)或多個(gè)字符
舉例如下:
此時(shí)我們將上述注解中的?替換為*,如下所示:
@RequestMapping("/a*a/test/ant")
將項(xiàng)目重新部署后,刷新瀏覽器頁(yè)面如下所示:
無(wú)論是一個(gè)字符還是多個(gè)字符,都能成功的訪問(wèn)地址
而需要注意的是和?占位符相同,此時(shí)替代*的字符不可以是/或者?(英文),否則會(huì)出現(xiàn)404,原因和?的是相通的
**:表示任意層數(shù)的任意目錄
舉例如下:
將路徑中的具體信息修改為如下所示:
@RequestMapping("/**/test/ant")
需要注意的是**只能寫(xiě)在//中,前后都不能有任何的字符
。
錯(cuò)誤實(shí)例:
@RequestMapping("/a**a/test/ant") @RequestMapping("/**a/test/ant")
重新部署項(xiàng)目,測(cè)試結(jié)果如下所示:
/**/所代表的的目錄我們既可以設(shè)置為一層,也可以設(shè)置為多層
但需要注意的是,即使可以設(shè)置任意層,但是目錄中依然不可以包含有英文的問(wèn)號(hào),否則如下所示:
注意:在使用**
時(shí),只能使用/**/xxx
的方式
@RequestMapping注解使用路徑中的占位符
通過(guò)路徑傳值的傳統(tǒng)方式為:
/deleteUser?id=1
下面我們要介紹一種簡(jiǎn)單的方式:需要在@RequestMapping注解的value屬性中所設(shè)置的路徑中,使用{xxx}的方式表示路徑中的數(shù)據(jù),在通過(guò)@PathVariable注解,將占位符所標(biāo)識(shí)的值和控制器方法的形參進(jìn)行綁定,具體操作如下所示:
第一步:編寫(xiě)對(duì)應(yīng)的控制器方法
package AnnotationController; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RequestMapping; @Controller public class JumpPageController { //注意:有幾個(gè)參數(shù)需要寫(xiě)幾個(gè){xxx}{xxx} @RequestMapping("/test/rest/{username}/{id}") //@PathVariable注解的值必須與@RequestMapping注解路徑具體信息中的參數(shù)名稱(chēng)相一致,否則會(huì)出現(xiàn)500錯(cuò)誤 public String testRest(@PathVariable("id") Integer id,@PathVariable("username") String username){ //獲取對(duì)應(yīng)參數(shù)的值 System.out.println("id:"+id+","+"username:"+username); return "success"; } }
第二步:在index.html文件中,設(shè)置其參數(shù)的具體值
注意這里值的順序應(yīng)與@RequestMapping注解中的參數(shù)順序保持一致,否則會(huì)因?yàn)轭?lèi)型不匹配導(dǎo)致出現(xiàn)400錯(cuò)誤
<a th:href="@{/test/rest/admin/1}">測(cè)試@RequestMapping注解value屬性中的占位符</a><br>
重新部署項(xiàng)目,測(cè)試結(jié)果如下:
在瀏覽器欄顯示了其參數(shù)的值
在控制臺(tái),也將對(duì)應(yīng)的參數(shù)信息顯示出來(lái)了
以上就是SpringMVC中的@RequestMapping注解的使用詳細(xì)教程的詳細(xì)內(nèi)容,更多關(guān)于SpringMVC @RequestMapping注解的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
SpringBoot中EasyExcel實(shí)現(xiàn)Excel文件的導(dǎo)入導(dǎo)出
這篇文章主要介紹了SpringBoot中EasyExcel實(shí)現(xiàn)Excel文件的導(dǎo)入導(dǎo)出,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-10-10教你如何使用Java實(shí)現(xiàn)WebSocket
這篇文章主要介紹了教你如何使用Java實(shí)現(xiàn)WebSocket問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-06-06Java實(shí)現(xiàn)對(duì)象排序的兩種方式詳解
這篇文章主要介紹了Java實(shí)現(xiàn)對(duì)象排序的兩種方式詳解,在Java中經(jīng)常會(huì)涉及到對(duì)象數(shù)組的排序問(wèn)題,則就提到對(duì)象之間的比較問(wèn)題,今天我們就來(lái)看一下兩種不同排序方式之間的區(qū)別,需要的朋友可以參考下2023-09-09JAVA 統(tǒng)計(jì)字符串中中文,英文,數(shù)字,空格,特殊字符的個(gè)數(shù)
這篇文章主要介紹了JAVA 統(tǒng)計(jì)字符串中中文,英文,數(shù)字,空格,特殊字符的個(gè)數(shù) ,本文通過(guò)一段代碼給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2019-06-06FeignClient如何通過(guò)配置變量調(diào)用配置文件url
這篇文章主要介紹了FeignClient如何通過(guò)配置變量調(diào)用配置文件url,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-06-06深入淺析 Spring Security 緩存請(qǐng)求問(wèn)題
這篇文章主要介紹了 Spring Security 緩存請(qǐng)求問(wèn)題,本文通過(guò)實(shí)例文字相結(jié)合的形式給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友參考下吧2019-04-04Java擴(kuò)展庫(kù)RxJava的基本結(jié)構(gòu)與適用場(chǎng)景小結(jié)
RxJava(GitHub: https://github.com/ReactiveX/RxJava)能夠幫助Java進(jìn)行異步與事務(wù)驅(qū)動(dòng)的程序編寫(xiě),這里我們來(lái)作一個(gè)Java擴(kuò)展庫(kù)RxJava的基本結(jié)構(gòu)與適用場(chǎng)景小結(jié),剛接觸RxJava的同學(xué)不妨看一下^^2016-06-06