解決@PathVariable對(duì)于特殊字符截?cái)嗟膯?wèn)題
概述:
@ResponseBody @RequestMapping(value="/download/{fileName:[a-zA-Z0-9\\.\\-\\_]+}", method = RequestMethod.GET) public void downloadAmr( HttpServletRequest request, HttpServletResponse response, @PathVariable("fileName") String fileName) { response.setContentType("application/octet-stream"); String dir = System.getProperty("catalina.home"); //獲得tomcat所在的工作路徑 System.out.println("tomcat路徑=" + dir); //獲取到存儲(chǔ)了文件存儲(chǔ)位置的filedir.properties 文件路徑 String dir2 = dir.substring(0, dir.length()) + File.separator +"webapps" + File.separator + "ROOT" + File.separator + fileName; File file = new File(dir2); ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream(); byte[] buffer = new byte[1024]; int len; try { InputStream inputStream = new FileInputStream(file); while ((len = inputStream.read(buffer)) > -1 ) { byteArrayOutputStream.write(buffer, 0, len); } byteArrayOutputStream.flush(); response.getOutputStream().write(byteArrayOutputStream.toByteArray()); } catch (FileNotFoundException e) { logger.error("讀取文件異常", e); } catch (IOException e) { logger.error(e.getMessage(), e); } logger.info("下載進(jìn)入。。。。。。。。。。。。。。。。。"); }
總結(jié):
1、默認(rèn)值情況下 /download/{fileName}, 然后 @PathVariable("fileName"),
如果路徑為/download/1.jpg的話,那么 fileName=1 而不是1.jpg,問(wèn)題就是默認(rèn)對(duì)于字符._-相關(guān)進(jìn)行截?cái)嗔恕?/p>
2、解決方法就是
{fileName:[a-zA-Z0-9\\.\\-\\_]+}
用正則表達(dá)式表示這些字符不能被截?cái)唷?/p>
補(bǔ)充:Springboot用@PathVariable傳參,最后一個(gè)參數(shù)會(huì)丟失小數(shù)點(diǎn)后面的部分
當(dāng)使用@PathVariable傳遞路徑參數(shù)時(shí),竟然神奇的發(fā)現(xiàn),后面一位參數(shù)的小數(shù)點(diǎn)后面部分竟然不見啦,如下代碼:
Controller方法注解如下:
@RequestMapping(value = "/user/findPassword/{email}", method = RequestMethod.GET, produces="application/json")
我這里是想傳遞個(gè)郵箱過(guò)來(lái)的,然后就發(fā)現(xiàn)了沒有郵箱后綴。
百思不得其解,遂百度之,解決方法如下:
@RequestMapping(value = "/user/findPassword/{email:.+}", method = RequestMethod.GET, produces="application/json")
在參數(shù)后面添加個(gè)冒號(hào)和一個(gè)小數(shù)點(diǎn)在加上一個(gè)加號(hào):{email:.+}
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教。
相關(guān)文章
SpringBoot結(jié)合mockito測(cè)試實(shí)戰(zhàn)
與集成測(cè)試將系統(tǒng)作為一個(gè)整體測(cè)試不同,單元測(cè)試更應(yīng)該專注于某個(gè)類。所以當(dāng)被測(cè)試類與外部類有依賴的時(shí)候,尤其是與數(shù)據(jù)庫(kù)相關(guān)的這種費(fèi)時(shí)且有狀態(tài)的類,很難做單元測(cè)試。但好在可以通過(guò)“Mockito”這種仿真框架來(lái)模擬這些比較費(fèi)時(shí)的類,從而專注于測(cè)試某個(gè)類內(nèi)部的邏輯2022-11-11SpringBoot注冊(cè)Servlet的三種方法詳解
這篇文章主要介紹了SpringBoot注冊(cè)Servlet的三種方法詳解,教你如何Spring Boot 注冊(cè) Servlet、Filter、Listener,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2019-05-05spring?@value無(wú)法取值多個(gè)properties文件的解決
這篇文章主要介紹了spring?@value無(wú)法取值多個(gè)properties文件的解決,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-03-03SpringAMQP消息隊(duì)列(SpringBoot集成RabbitMQ方式)
這篇文章主要介紹了SpringAMQP消息隊(duì)列(SpringBoot集成RabbitMQ方式),具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-04-04@Async導(dǎo)致controller?404及失效原因解決分析
這篇文章主要為大家介紹了@Async導(dǎo)致controller?404失效問(wèn)題解決,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-07-07