Spring boot 2.xファイルパスマッピング問題の概要

5277 ワード

実行可能なjava jarパッケージを実行するとき、私たちはjarの中の内容を変えることはできません.そのため、ファイルのアップロードパスは私たちが考えなければならない問題になります.私たちは直接このjarパッケージにファイルを書くことはできません.では、jarパッケージの外に書くしかありませんが、jarパッケージの外に書くとき、どのように内蔵のtomcatでファイルをダウンロードしますか.Springbootはjarパケットの外部パスをjarにマッピングする方法を提供します.次に、どのように実現するかを見てみましょう.1、springboot 2.0以前:WebMvcConfigurerAdapterを継承することでファイルパスのマッピングを実現しました.
@Configuration
public class FileConfig extends WebMvcConfigurerAdapter {

    private String uploadPath = E://file/;

    @Override
    public void addResourceHandlers(ResourceHandlerRegistry registry) {
        registry.addResourceHandler("/file/**").addResourceLocations("file:"+uploadPath);
        super.addResourceHandlers(registry);
    }
}

2、WebMvcConfigurerAdapterの内部実装WebMvcConfigurerAdapterはWebMvcConfigurerインタフェースのすべての空の方法を実現した.
@Deprecated
public abstract class WebMvcConfigurerAdapter implements WebMvcConfigurer {
    public WebMvcConfigurerAdapter() {}
        
    public void configurePathMatch(PathMatchConfigurer configurer) {}
        
    public void configureContentNegotiation(ContentNegotiationConfigurer configurer) {}

    public void configureAsyncSupport(AsyncSupportConfigurer configurer) {}

    public void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer) {}

    public void addFormatters(FormatterRegistry registry) {}

    public void addInterceptors(InterceptorRegistry registry) {}

    public void addResourceHandlers(ResourceHandlerRegistry registry) {}

    public void addCorsMappings(CorsRegistry registry) {}

    public void addViewControllers(ViewControllerRegistry registry) {}

    public void configureViewResolvers(ViewResolverRegistry registry) {}

    public void addArgumentResolvers(List argumentResolvers) {}

    public void addReturnValueHandlers(List returnValueHandlers) {}

    public void configureMessageConverters(List> converters) {}

    public void extendMessageConverters(List> converters) {}

    public void configureHandlerExceptionResolvers(List exceptionResolvers) {}

    public void extendHandlerExceptionResolvers(List exceptionResolvers) {}
    @Nullable
    public Validator getValidator() {
        return null;
    }

    @Nullable
    public MessageCodesResolver getMessageCodesResolver() {
        return null;
    }
}

3、WebMvcConfigurerAdapterはどうして時代遅れになったのですか.これは、Javaのバージョンが更新されたため、Java 8ではdefaultキーワードを使用してインタフェースにデフォルトのメソッドを追加することができ、Springはアップグレード中にJava 8の新しい特性を同期的にサポートしているからです.4、WebMvcConfigurer新しく選択したインタフェースWebMvcConfigurerを見てみましょう.WebMvcConfigurerはデフォルトで空の実装がある以上、WebMvcConfigurerインタフェースを直接実現すればいいです.
public interface WebMvcConfigurer {
    default void configurePathMatch(PathMatchConfigurer configurer) {}

    default void configureContentNegotiation(ContentNegotiationConfigurer configurer) {}

    default void configureAsyncSupport(AsyncSupportConfigurer configurer) {}

    default void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer) {}

    default void addFormatters(FormatterRegistry registry) {}

    default void addInterceptors(InterceptorRegistry registry) {}

    default void addResourceHandlers(ResourceHandlerRegistry registry) {}

    default void addCorsMappings(CorsRegistry registry) {}

    default void addViewControllers(ViewControllerRegistry registry) {}

    default void configureViewResolvers(ViewResolverRegistry registry) {}

    default void addArgumentResolvers(List resolvers) {}

    default void addReturnValueHandlers(List handlers) {}

    default void configureMessageConverters(List> converters) {}

    default void extendMessageConverters(List> converters) {}

    default void configureHandlerExceptionResolvers(List resolvers) {}

    default void extendHandlerExceptionResolvers(List resolvers) {}

    @Nullable
    default Validator getValidator() {
        return null;
    }

    @Nullable
    default MessageCodesResolver getMessageCodesResolver() {
        return null;
    }
}

5、更新後のコードは以下の通りです.
@Configuration
public class FileConfig implements WebMvcConfigurer {

    private String uploadPath = E://file/;

    @Override
    public void addResourceHandlers(ResourceHandlerRegistry registry) {
        registry.addResourceHandler("/file/**").addResourceLocations("file:"+uploadPath);
        super.addResourceHandlers(registry);
    }
}

皆さんが直接使いたいspring bootバージョンが2以上なら、5点目をプロジェクトにコピーすればいいです.最後に広範なプログラム猿1024の楽しみを祈ります.髪の毛が長くて、バグが少ない.
もし文章があなたに役に立つならば、少し称賛して関心を持つことを覚えておいてください~みんなが私の公衆番号に関心を持つことを歓迎して、毎日技術は文章を送ってみんなの学習の参考に供します.