解決@PathVariable對于特殊字符截斷的問題
概述:
@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); //獲取到存儲了文件存儲位置的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("下載進入。。。。。。。。。。。。。。。。。"); }
總結(jié):
1、默認值情況下 /download/{fileName}, 然后 @PathVariable("fileName"),
如果路徑為/download/1.jpg的話,那么 fileName=1 而不是1.jpg,問題就是默認對于字符._-相關(guān)進行截斷了。
2、解決方法就是
{fileName:[a-zA-Z0-9\\.\\-\\_]+}
用正則表達式表示這些字符不能被截斷。
補充:Springboot用@PathVariable傳參,最后一個參數(shù)會丟失小數(shù)點后面的部分
當使用@PathVariable傳遞路徑參數(shù)時,竟然神奇的發(fā)現(xiàn),后面一位參數(shù)的小數(shù)點后面部分竟然不見啦,如下代碼:
Controller方法注解如下:
@RequestMapping(value = "/user/findPassword/{email}", method = RequestMethod.GET, produces="application/json")
我這里是想傳遞個郵箱過來的,然后就發(fā)現(xiàn)了沒有郵箱后綴。
百思不得其解,遂百度之,解決方法如下:
@RequestMapping(value = "/user/findPassword/{email:.+}", method = RequestMethod.GET, produces="application/json")
在參數(shù)后面添加個冒號和一個小數(shù)點在加上一個加號:{email:.+}
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。如有錯誤或未考慮完全的地方,望不吝賜教。
相關(guān)文章
SpringBoot結(jié)合mockito測試實戰(zhàn)
與集成測試將系統(tǒng)作為一個整體測試不同,單元測試更應(yīng)該專注于某個類。所以當被測試類與外部類有依賴的時候,尤其是與數(shù)據(jù)庫相關(guān)的這種費時且有狀態(tài)的類,很難做單元測試。但好在可以通過“Mockito”這種仿真框架來模擬這些比較費時的類,從而專注于測試某個類內(nèi)部的邏輯2022-11-11spring?@value無法取值多個properties文件的解決
這篇文章主要介紹了spring?@value無法取值多個properties文件的解決,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-03-03SpringAMQP消息隊列(SpringBoot集成RabbitMQ方式)
這篇文章主要介紹了SpringAMQP消息隊列(SpringBoot集成RabbitMQ方式),具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2024-04-04@Async導(dǎo)致controller?404及失效原因解決分析
這篇文章主要為大家介紹了@Async導(dǎo)致controller?404失效問題解決,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2022-07-07