解决@PathVariable对于特殊字符截断的问题

网友投稿 968 2023-02-10

解决@PathVariable对于特殊字符截断的问题

解决@PathVariable对于特殊字符截断的问题

概述:

@ResponseBody

@RequestMapping(value="/download/{fileName:[a-zhttp://A-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"); //vRoxRHWwS获得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("-进入。。。。。。。。。。。。。。。。。");

}

总结:

1、默认值情况下 /download/{fileName}, 然后 @PathVariable("fileName"),

如果路径为/download/1.jpg的话,那么 fileName=1 而不是1.jpg,问题就是默认对于字符._-相关进行截断了。

2、解决方法就是

{fileName:[a-zA-Z0-9\\.\\-\\_]+}

正则表达式表示这些字符不能被截断。

补充:Springboot用@PathVariable传参,最后一个参数会丢失小数点后面的部分

当使用@PathVariable传递路径参数时,竟然神奇的发现,后面一位参数的小数点后面部分竟然不见啦,如下代码

Controller方法注解如下:

@RequestMapping(value = "/user/findPassword/{email}", method = RequestMethod.GET, produces="application/json")

我这里是想传递个邮箱过来的,然后就发现了没有邮箱后缀。

百思不得其解,遂百度之,解决方法如下:

@RequestMapping(value = "/user/findPassword/{email:.+}", method = RequestMethod.GET, produces="application/json")

在参数后面添加个冒号和一个小数点在加上一个加号:{email:.+}

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:spring boot @PathVariable传递带反斜杠参数 / 的处理
下一篇:网络安全前端开发岗位要求(网络安全前端开发岗位要求高吗)
相关文章

 发表评论

暂时没有评论,来抢沙发吧~