解決@PathVariable出現(xiàn)點號.時導(dǎo)致路徑參數(shù)截斷獲取不全的問題
@PathVariable出現(xiàn)點號.時導(dǎo)致路徑參數(shù)截斷獲取不全
1、問題
SpringMVC項目中通過下面的URL進行GET請求。當version有多個小數(shù)點的時候。如version為1.0.1008。后臺通過@PathVariable來獲取version等于1.0。會丟失部分數(shù)據(jù)。
URL:
http://host_ip/consumer/appVersion/phone/android/download/{version}
Controller:
@RequestMapping(value="android/download/{version}",method=RequestMethod.GET) public void download(HttpSession session,HttpServletResponse response,@PathVariable("version")String version){ }
2、解決方案
在version段后增加一個靜態(tài)的字符段,這個段沒有任何意義,可以為任意字符。
URL:
http://host_ip/consumer/appVersion/phone/android/download/{version}/static_str
問題雖然解決了,但畢竟URL后多了個小尾巴,心情不愉悅。
再次谷哥。
參考:
http://stackoverflow.com/questions/3526523/spring-mvc-pathvariable-getting-truncated
URL不加小尾巴。
在@RequestMapping的value中使用SpEL來表示,value中的{version}換成{version:.+}。
@RequestMapping(value="android/download/{version:.+}",method=RequestMethod.GET) public void download(HttpSession session,HttpServletResponse response,@PathVariable("version")String version){ }
終于可以再一次愉悅地進行玩耍了。
@PathVariable中帶有.等特殊符號的處理方式
最近在項目中用到了
下載文件,有的文件url中,就帶有.等
例如
catalina.2019-05-07.log
假如用
/download/{fileName} @PathVariable String fileName
則收到的名稱就是catalina.2019-05-07,這是被springmvc自動移除最后的.以及后面的值
需要修改
使用如下即可正常
/download/{fileName:.+} @PathVariable String fileName
spring MVC從3.0開始支持REST,而主要就是通過@PathVariable來處理請求參數(shù)和路徑的映射。
由于考慮到SEO的緣故,很多人喜歡把新聞的名稱作為路徑中的一部分去處理,這時候中文的名稱就會遇到問題,沒辦法映射,這個是因為編碼問題,只要到 TOMCAT/conf下找到server.xml,添加URIEncoding=”UTF-8”進行URL編碼設(shè)置就可以解決中文問題。
另外經(jīng)常遇到路徑中有點”.”,而點是特殊字符,比如.html, .do等等,所以Spring MVC默認是把點后面的信息當作文件后綴,這時候我們就要修改這個默認值。
另外,這時候如果只設(shè)置這個,請求可以傳遞到對于的controller,但傳過去的數(shù)據(jù)會有問題,只會傳最后一個點前面的數(shù)據(jù),除非你在最后加上“/”,比如/news/測試.點/ 這樣就會把“測試.點”當作整體,不然只會得到“測試”。這時候我們可以這樣設(shè)置@RequestMapping(“/news/{title:.*}”)
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
Java與C++實現(xiàn)相同的MD5加密算法簡單實例
下面小編就為大家?guī)硪黄狫ava與C++實現(xiàn)相同的MD5加密算法簡單實例。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2016-09-09解讀Integer類的parseInt和valueOf的區(qū)別
這篇文章主要介紹了解讀Integer類的parseInt和valueOf的區(qū)別,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-11-11Java中一維二維數(shù)組的靜態(tài)和動態(tài)初始化
今天通過本文給大家分享Java中的數(shù)組,包括一維數(shù)組和二維數(shù)組的靜態(tài)初始化和動態(tài)初始化問題,感興趣的朋友一起看看吧2017-10-10分析JVM源碼之Thread.interrupt系統(tǒng)級別線程打斷
在java編程中,我們經(jīng)常會調(diào)用Thread.sleep()方法使得線程停止運行一段時間,而Thread類中也提供了interrupt方法供我們?nèi)ブ鲃哟驍嘁粋€線程。那么線程掛起和打斷的本質(zhì)究竟是什么,本文就此問題作一個探究2021-06-06java基本教程之synchronized關(guān)鍵字 java多線程教程
這篇文章主要介紹了java的synchronized原理、synchronized基本規(guī)則、synchronized方法 和 synchronized代碼塊、實例鎖和全局鎖2014-01-01