解决@PathVariable对于特殊字符截断的问题
作者:往前的娘娘 发布时间:2021-10-10 08:19:40
标签:@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("下载进入。。。。。。。。。。。。。。。。。");
}
总结:
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:.+}
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。如有错误或未考虑完全的地方,望不吝赐教。
来源:https://blog.csdn.net/m0_37355951/article/details/77113621


猜你喜欢
- 本文实例讲述了JAVA随机打乱数组顺序的方法。分享给大家供大家参考。具体实现方法如下:import java.util.Random;&nb
- 表达式树的概念表达式树的创建有 Lambda法 和 组装法。学习表达式树需要 委托、Lambda、F
- 时钟的使用1、声明VOID CALLBACK playproc( HWND hwnd, &nb
- 百度一下搭建go-cqhttp,千篇一律都是采用python搭建的,Java搭建根本没有。导致自己在搭建的时候可折磨了,出现了许多的问题。唯
- 1 修改项目打包类型在pom.xml里,项目打包类型将jar设置成war:<packaging>war</packagin
- 问题描述提交表单到servlet时出现空白页面,但又网站不报错截图如下遇到这个问题查找了很多,仍没有解决,刚开始接触IDEA,以为是路径配置
- ViewPager有个方法叫做:setPageTransformer(boolean reverseDrawingOrder, PageTr
- 概念介绍不同的引用类型,主要体现的是对象不同的可达性(reachable)状态和对垃圾收集的影响。01. 强引用这个就
- 前言老了,老了,那天有位小同事问我Android跳转三方应用时有什么要注意的?是否可以直接跳?如何传递参数过去? 嗯… 我竟然说需要root
- 如果对共享的可变数据的访问不能同步,其后果非常可怕,即使这个变量是原子可读写的。下面考虑一个线程同步方面的问题。对于线程同步,Java类库提
- 本文介绍了Java中常见死锁与活锁的实例详解,分享给大家,具体如下:顺序死锁:过度加锁,导致由于执行顺序的原因,互相持有对方正在等待的锁资源
- 前面,学了物体的移动功能,现在来学一下C#实现鼠标控制摄像机(视角)移动。代码如下:C#脚本(在Unity 5.5.1 下能运行):usin
- 前言我们知道在 Java 中读取一些配置文件信息,是在开发中十分常用的要求。例如:这里我们使用 JDBC 实例:连接My
- 实现跨服务的远程调用(RestTemplate)业务场景:在返回订单信息数据中显示用户信息实现思路:基于RestTemplate发起的htt
- 本文实例为大家分享了flutter实现不规则底部导航栏的具体代码,供大家参考,具体内容如下实现底部导航栏并点击切换页面可简述为有三种方式Ta
- 本文实例讲述了C#多线程学习之操纵一个线程的方法。分享给大家供大家参考。具体实现方法如下:下面我们就动手来创建一个线程,使用Thread类创
- 注解是 JDK 5.0 引入的一种注释机制。注解可以作用在类型(类、接口、枚举等)、属性、方法、参数等不同位置,具体的 JDK
- 介绍:上篇给大家介绍了ssm多模块项目的搭建,在搭建过程中spring整合springmvc和mybatis时会有很多的东西需要我们进行配置
- java 中HashCode重复的可能性今天有同事提议用String的hashcode得到int类型作为主键。其实hashcode重复的可能
- 前两天忙着写开题报告,没有来得及做项目,今天继续研究一下这个项目。上次研究到后端的DAO层,研究了一下后端和数据库交互的过程,service