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

 更新时间:2021年02月24日 08:38:09   作者:往前的娘娘  
这篇文章主要介绍了解决@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:.+}

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。如有错误或未考虑完全的地方,望不吝赐教。

相关文章

  • Layui 后台加载菜单栏名称以及url的例子

    Layui 后台加载菜单栏名称以及url的例子

    今天小编就为大家分享一篇Layui 后台加载菜单栏名称以及url的例子,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-09-09
  • Java实现批量导出导入数据及附件文件zip包

    Java实现批量导出导入数据及附件文件zip包

    这篇文章主要为大家详细介绍了Java实现批量导出导入数据及附件文件zip包的方法,文中的示例代码讲解详细,感兴趣的小伙伴可以了解一
    2022-09-09
  • IDEA生成可运行jar包(包含第三方jar包)流程详解

    IDEA生成可运行jar包(包含第三方jar包)流程详解

    这篇文章主要介绍了IDEA生成可运行jar包(包含第三方jar包)流程详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-11-11
  • Java并发编程示例(六):等待线程执行终止

    Java并发编程示例(六):等待线程执行终止

    这篇文章主要介绍了Java并发编程示例(六):等待线程执行终止,在本节,示例程序演示等待初始化方法完成后,再去执行其他任务,需要的朋友可以参考下
    2014-12-12
  • zuul转发后服务取不到请求路径的解决

    zuul转发后服务取不到请求路径的解决

    这篇文章主要介绍了zuul转发后服务取不到请求路径的解决方案,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-07-07
  • java自动装箱拆箱深入剖析

    java自动装箱拆箱深入剖析

    基本数据(Primitive)类型的自动装箱(autoboxing)、拆箱(unboxing)是自J2SE 5.0开始提供的功能。java语言规范中说道:在许多情况下包装与解包装是由编译器自行完成的(在这种情况下包装成为装箱,解包装称为拆箱)
    2012-11-11
  • java使用jar包生成二维码的示例代码

    java使用jar包生成二维码的示例代码

    这篇文章主要介绍了java使用jar包生成二维码的示例代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-11-11
  • Java 接口和抽象类的区别详解

    Java 接口和抽象类的区别详解

    在面向对象编程中,抽象类和接口是两个经常被用到的语法概念,是面向对象四大特性,以及很多设计模式、设计思想、设计原则编程实现的基础。本文将主要讲解二者的区别
    2021-05-05
  • SpringBoot 任务调度动态设置方式(不用重启服务)

    SpringBoot 任务调度动态设置方式(不用重启服务)

    这篇文章主要介绍了SpringBoot 任务调度 动态设置方式(不用重启服务),具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-11-11
  • Java Lambda表达式实例解析原理

    Java Lambda表达式实例解析原理

    日常开发中,我们很多时候需要用到Java 8的Lambda表达式,它允许把函数作为一个方法的参数,让我们的代码更优雅、更简洁。所以整理了一波工作中常用的Lambda表达式。看完一定会有帮助的
    2023-03-03

最新评论