当我们在运行可执行的java jar包的时候,我们肯定改变不了jar里面的内容,因此文件上传路径就成了我们必须考虑的一点问题,我们不能往直接这个jar包里面写文件,那么只能写在jar包外面,但是写到jar包外面的时候要怎么通过内置的tomcat下载文件呢?springboot给我们提供了一种方式,可以将jar包外部路径映射到jar里面。接下来我们看看如何实现。

1、springboot2.0以前:我们通过继承WebMvcConfigurerAdapter来实现文件路径的映射。

  1. @Configuration
  2. public class FileConfig extends WebMvcConfigurerAdapter {
  3. private String uploadPath = E://file/;
  4. @Override
  5. public void addResourceHandlers(ResourceHandlerRegistry registry) {
  6. registry.addResourceHandler("/file/**").addResourceLocations("file:"+uploadPath);
  7. super.addResourceHandlers(registry);
  8. }
  9. }

2、WebMvcConfigurerAdapter的内部实现

WebMvcConfigurerAdapter实现了WebMvcConfigurer接口的所有空方法。

  1. @Deprecated
  2. public abstract class WebMvcConfigurerAdapter implements WebMvcConfigurer {
  3. public WebMvcConfigurerAdapter() {}
  4. public void configurePathMatch(PathMatchConfigurer configurer) {}
  5. public void configureContentNegotiation(ContentNegotiationConfigurer configurer) {}
  6. public void configureAsyncSupport(AsyncSupportConfigurer configurer) {}
  7. public void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer) {}
  8. public void addFormatters(FormatterRegistry registry) {}
  9. public void addInterceptors(InterceptorRegistry registry) {}
  10. public void addResourceHandlers(ResourceHandlerRegistry registry) {}
  11. public void addCorsMappings(CorsRegistry registry) {}
  12. public void addViewControllers(ViewControllerRegistry registry) {}
  13. public void configureViewResolvers(ViewResolverRegistry registry) {}
  14. public void addArgumentResolvers(List<HandlerMethodArgumentResolver> argumentResolvers) {}
  15. public void addReturnValueHandlers(List<HandlerMethodReturnValueHandler> returnValueHandlers) {}
  16. public void configureMessageConverters(List<HttpMessageConverter<?>> converters) {}
  17. public void extendMessageConverters(List<HttpMessageConverter<?>> converters) {}
  18. public void configureHandlerExceptionResolvers(List<HandlerExceptionResolver> exceptionResolvers) {}
  19. public void extendHandlerExceptionResolvers(List<HandlerExceptionResolver> exceptionResolvers) {}
  20. @Nullable
  21. public Validator getValidator() {
  22. return null;
  23. }
  24. @Nullable
  25. public MessageCodesResolver getMessageCodesResolver() {
  26. return null;
  27. }
  28. }

3、WebMvcConfigurerAdapter为什么会过时?

这是因为由于Java的版本更新,在Java 8中,可以使用default关键词为接口添加默认的方法,Spring在升级的过程中也同步支持了Java 8中这一新特性。

4、新选择WebMvcConfigurer

我们看一下它实现的接口WebMvcConfigurer,既然WebMvcConfigurer默认有了空实现,我们直接实现WebMvcConfigurer接口即可。

  1. public interface WebMvcConfigurer {
  2. default void configurePathMatch(PathMatchConfigurer configurer) {}
  3. default void configureContentNegotiation(ContentNegotiationConfigurer configurer) {}
  4. default void configureAsyncSupport(AsyncSupportConfigurer configurer) {}
  5. default void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer) {}
  6. default void addFormatters(FormatterRegistry registry) {}
  7. default void addInterceptors(InterceptorRegistry registry) {}
  8. default void addResourceHandlers(ResourceHandlerRegistry registry) {}
  9. default void addCorsMappings(CorsRegistry registry) {}
  10. default void addViewControllers(ViewControllerRegistry registry) {}
  11. default void configureViewResolvers(ViewResolverRegistry registry) {}
  12. default void addArgumentResolvers(List<HandlerMethodArgumentResolver> resolvers) {}
  13. default void addReturnValueHandlers(List<HandlerMethodReturnValueHandler> handlers) {}
  14. default void configureMessageConverters(List<HttpMessageConverter<?>> converters) {}
  15. default void extendMessageConverters(List<HttpMessageConverter<?>> converters) {}
  16. default void configureHandlerExceptionResolvers(List<HandlerExceptionResolver> resolvers) {}
  17. default void extendHandlerExceptionResolvers(List<HandlerExceptionResolver> resolvers) {}
  18. @Nullable
  19. default Validator getValidator() {
  20. return null;
  21. }
  22. @Nullable
  23. default MessageCodesResolver getMessageCodesResolver() {
  24. return null;
  25. }
  26. }

5、更新后的代码如下:

  1. @Configuration
  2. public class FileConfig implements WebMvcConfigurer {
  3. private String uploadPath = E://file/;
  4. @Override
  5. public void addResourceHandlers(ResourceHandlerRegistry registry) {
  6. registry.addResourceHandler("/file/**").addResourceLocations("file:"+uploadPath);
  7. super.addResourceHandlers(registry);
  8. }
  9. }

如果各位想直接使用,且用的spring boot版本在2以上,则复制第五点到项目中就好了。最后祝广大程序猿1024快乐。多长头发,少些bug。

如果文章对您有帮助,请记得点赞关注哟~

欢迎大家关注我的公众号<情系IT>,每日技术推送文章供大家学习参考。

spring boot 2.x文件路径映射问题汇总的更多相关文章

  1. springboot(十七):使用Spring Boot上传文件

    上传文件是互联网中常常应用的场景之一,最典型的情况就是上传头像等,今天就带着带着大家做一个Spring Boot上传文件的小案例. 1.pom包配置 我们使用Spring Boot最新版本1.5.9. ...

  2. (转)Spring Boot(十七):使用 Spring Boot 上传文件

    http://www.ityouknow.com/springboot/2018/01/12/spring-boot-upload-file.html 上传文件是互联网中常常应用的场景之一,最典型的情 ...

  3. Spring Boot(十七):使用Spring Boot上传文件

    Spring Boot(十七):使用Spring Boot上传文件 环境:Spring Boot最新版本1.5.9.jdk使用1.8.tomcat8.0 一.pom包配置 <parent> ...

  4. Spring boot 默认静态资源路径与手动配置访问路径的方法

    这篇文章主要介绍了Spring boot 默认静态资源路径与手动配置访问路径的方法,非常不错,具有参考借鉴价值,需要的朋友可以参考下   在application.propertis中配置 ##端口号 ...

  5. 使用Spring Boot上传文件

    原文:http://www.cnblogs.com/ityouknow/p/8298344.html 上传文件是互联网中常常应用的场景之一,最典型的情况就是上传头像等,今天就带着带着大家做一个Spri ...

  6. Spring Boot(十七):使用 Spring Boot 上传文件

      上传文件是互联网中常常应用的场景之一,最典型的情况就是上传头像等,今天就带着带着大家做一个 Spring Boot 上传文件的小案例. 1.pom 包配置 我们使用 Spring Boot 版本 ...

  7. Spring Boot上传文件(带进度条)

    Spring Boot 上传文件(带进度条)# 配置文件 spring: freemarker: template-loader-path: classpath:/static/ ##Spring B ...

  8. Spring Boot 嵌入式 Tomcat 文件上传、url 映射虚拟路径

    1.Java web 应用开发完成后如果是导入外置的 Tomcat 的 webapps 目录的话,那么上传的文件可以直接的放在应用的 web 目录下去就好了,浏览器可以很方便的进行访问. 2.Spri ...

  9. 在Spring Boot中从类路径加载文件

    介绍 创建Spring Boot Web应用程序时,有时有时需要从类路径中加载文件:war和jar的加载文件格式是不一样的 在下面,您将找到在WAR和JAR中加载文件的解决方案. 资源加载器 使用Ja ...

随机推荐

  1. Linux环境基于CentOS7 搭建部署Docker容器

    1.Docker容器概述 区分Docker容器技术和VM虚拟机技术: evernotecid://394EFE90-9CE0-4D65-A8CD-DFEC0DC8061E/appyinxiangcom ...

  2. 使用python合并excel

    当工作碰到需要将几个excel合并时,比如一个表,收集每个人的个人信息,陆续收回来就是十几张甚至几十张表,少了还好解决,但是很多的话就不能一个一个去复制了,这时候就想到了python,Python大法 ...

  3. charles 代理设置

    本文参考:charles 代理设置 charles的代理身份配置区域 这里应该没啥好说的了, window/MAXCos proxy 是charles的代理启用开关: 如果你选中,则表示电脑使用cha ...

  4. Linux初识之VMWare中Centos7的安装

    Windows平台下VMWare 14安装Centos 7 一.虚拟机硬件配置 1.选择创建新的虚拟机: 2.选择自定义(高级)进行自定义配置,单击下一步: 3.选择虚拟机硬件兼容性为默认,单击下一步 ...

  5. MIT-Adobe FiveK Dataset 图片自动下载

    MIT-Adobe FiveK Dataset 图片自动下载 MIT-Adobe FiveK是现在很多做图像增强(image enhancement)与图像修饰(image retouching)方面 ...

  6. APP功能测试要点(功能测试重点)

    APP功能测试要点 1.功能性测试 根据产品需求文档编写测试用例而进行测试,包括客户端的单个功能模块以及功能业务逻辑(功能交互)如:涉及输入的地方需要考虑等价类,边界值,异常或非法等 1.1 安装与卸 ...

  7. MyEclipse中的web项目之前有个感叹号

    java web项目有感叹号说明导入的jar包存在问题 或者环境配置不正确 解决办法是点击项目-->Build path -->configure Build Path 然后来到Libra ...

  8. 接口是什么?接口长什么样?java的Interface

    今天来看看java接口长哪样.接口是特殊抽象类. 一个子类只能继承一个抽象类(父类),所以就有接口这个特殊抽象类. 下面以一个电脑的USB为例: 定义接口标准 public interface USB ...

  9. JVM 调优 - jmap

    Java命令学习系列(三)——Jmap 2015-05-16 分类:Java 阅读(17065) 评论(9) 阿里大牛珍藏架构资料,点击链接免费获取 Jmap jmap是JDK自带的工具软件,主要用于 ...

  10. SOFAJRaft—初次使用

    SOFAJRaft-初次使用 SOFAJRaft 是基于 Raft 算法的生产级高性能 Java 实现,支持 MULTI-RAFT-GROUP.应用场景有 Leader 选举.分布式锁服务.高可靠的元 ...