解決@PathVariable對于特殊字符截?cái)嗟膯栴}
概述:
@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("下載進(jìn)入。。。。。。。。。。。。。。。。。");
}
總結(jié):
1、默認(rèn)值情況下 /download/{fileName}, 然后 @PathVariable("fileName"),
如果路徑為/download/1.jpg的話,那么 fileName=1 而不是1.jpg,問題就是默認(rèn)對于字符._-相關(guān)進(jìn)行截?cái)嗔恕?/p>
2、解決方法就是
{fileName:[a-zA-Z0-9\\.\\-\\_]+}
用正則表達(dá)式表示這些字符不能被截?cái)唷?/p>
補(bǔ)充:Springboot用@PathVariable傳參,最后一個(gè)參數(shù)會丟失小數(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è)郵箱過來的,然后就發(fā)現(xiàn)了沒有郵箱后綴。
百思不得其解,遂百度之,解決方法如下:
@RequestMapping(value = "/user/findPassword/{email:.+}", method = RequestMethod.GET, produces="application/json")
在參數(shù)后面添加個(gè)冒號和一個(gè)小數(shù)點(diǎn)在加上一個(gè)加號:{email:.+}
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教。
相關(guān)文章
springboot使用之多個(gè)filter的執(zhí)行順序以及配置方式
這篇文章主要介紹了springboot使用之多個(gè)filter的執(zhí)行順序以及配置方式,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-08-08
spring中12種@Transactional的失效場景(小結(jié))
日常我們進(jìn)行業(yè)務(wù)開發(fā)時(shí),基本上使用的都是聲明式事務(wù),即為使用@Transactional注解的方式,本文主要介紹了spring中12種@Transactional的失效場景,感興趣的小伙伴們可以參考一下2022-01-01
spring的UnexpectedRollbackException事務(wù)嵌套示例解析
這篇文章主要為大家介紹了spring的UnexpectedRollbackException事務(wù)嵌套示例解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-09-09
關(guān)于java入門與java開發(fā)環(huán)境配置詳細(xì)教程
這篇文章主要介紹了關(guān)于java入門與java開發(fā)環(huán)境配置詳細(xì)教程,本文通過圖文并茂的形式給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-03-03
詳解RSA加密算法的原理與Java實(shí)現(xiàn)
這篇文章主要和大家分享非對稱加密中的一種算法,那就是 RSA 加密算法。本文介紹了RSA算法的原理與Java實(shí)現(xiàn),感興趣的小伙伴可以嘗試一下2022-10-10
Spring Security 中的 AuthenticationManager配置及使用
本文我們將探討 AuthenticationManager 在 Spring Security 中的作用,并指導(dǎo)您完成其配置和實(shí)際應(yīng)用,感興趣的朋友跟隨小編一起看看吧2024-11-11

