タイプWebMvcConfigurerAdapterは廃止されました


116

Spring MVCバージョンに移行するだけです5.0.1.RELEASEが、突然EclipseでSTS WebMvcConfigurerAdapterが非推奨としてマークされます

public class MvcConfig extends WebMvcConfigurerAdapter {
  @Override
    public void addResourceHandlers(ResourceHandlerRegistry registry) {
        registry.addResourceHandler("/resources/**").addResourceLocations("/resources/");
        // to serve static .html pages...
        registry.addResourceHandler("/static/**").addResourceLocations("/resources/static/");
    }
  ....
  }

どうすればこれを削除できますか?

回答:


227

Spring 5以降では、インターフェースを実装する必要があるだけですWebMvcConfigurer

public class MvcConfig implements WebMvcConfigurer {

これは、Java 8がWebMvcConfigurerAdapterクラスの機能をカバーするインターフェースにデフォルトのメソッドを導入したためです

こちらをご覧ください:

https://docs.spring.io/spring/docs/current/javadoc-api/org/springframework/web/servlet/config/annotation/WebMvcConfigurerAdapter.html


1
どうすればsuper.configureMessageConverters(converters)このコードを翻訳できますか?現在super、参照する必要はありません。
tryHard 2018年

1
@yami configureMessageConverters(converters)を呼び出すだけで、インターフェースで定義されたデフォルトのメソッドが実行されます
Plog

@ Plog、@ Yami:推奨どおりに実行するとjava.lang.StackOverflowError、が生成され.superます。
ThirstForKnowledge

2
リストにコンバーターを追加すると、デフォルトのコンバーター登録がオフになります。最初にsuper.configureMessageConverters(converters)を呼び出すことで、おそらくデフォルトのコンバーターを保持したいと思うでしょう。デフォルトの登録に影響を与えずに単にコンバーターを追加するには、代わりにメソッドextendMessageConverters(java.util.List)docs.spring.io/spring/docs/current/javadoc-api/org/…)を使用することを検討してください。
ThirstForKnowledge

1
@ThirstForKnowledgeああこれは私の悪いです。インターフェイスでスーパーデフォルトメソッドを呼び出す方法は次のとおりです:WebMvcConfigurer.super.configureMessageConverters(converters)
Plog

7

私はSpringfox今日呼ばれているSwagger同等のドキュメントライブラリに取り組んでおり、Spring 5.0.8(現在実行中)では、インターフェイスが直接拡張できるWebMvcConfigurerクラスWebMvcConfigurationSupportクラスによって実装されていることを発見しました。

import org.springframework.web.servlet.config.annotation.WebMvcConfigurationSupport;

public class WebConfig extends WebMvcConfigurationSupport { }

これは、リソース処理メカニズムを次のように設定するために使用した方法です。

@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
    registry.addResourceHandler("swagger-ui.html")
            .addResourceLocations("classpath:/META-INF/resources/");

    registry.addResourceHandler("/webjars/**")
            .addResourceLocations("classpath:/META-INF/resources/webjars/");
}

1

使用する org.springframework.web.servlet.config.annotation.WebMvcConfigurer

Spring Boot 2.1.4.RELEASE(Spring Framework 5.1.6.RELEASE)では、次のようにします

package vn.bkit;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.ViewResolver;
import org.springframework.web.servlet.config.annotation.DefaultServletHandlerConfigurer;
import org.springframework.web.servlet.config.annotation.EnableWebMvc;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter; // Deprecated.
import org.springframework.web.servlet.view.InternalResourceViewResolver;

@Configuration
@EnableWebMvc
public class MvcConfiguration implements WebMvcConfigurer {

    @Bean
    public ViewResolver getViewResolver() {
        InternalResourceViewResolver resolver = new InternalResourceViewResolver();
        resolver.setPrefix("/WEB-INF/");
        resolver.setSuffix(".html");
        return resolver;
    }

    @Override
    public void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer) {
        configurer.enable();
    }

}

0

Springでは、すべてのリクエストがDispatcherServletを通過します。DispatcherServlet(Front contoller)による静的ファイル要求を回避するために、MVC静的コンテンツを構成します。

春3.1。ResourceHandlerRegistryを導入して、クラスパス、WAR、またはファイルシステムから静的リソースを提供するためのResourceHttpRequestHandlerを構成しました。ResourceHandlerRegistryをプログラムでWebコンテキスト構成クラス内に構成できます。

  • /js/**ResourceHandlerにパターンを追加しfoo.jsました。webapp/js/ディレクトリにあるリソースを含めましょう
  • /resources/static/**ResourceHandlerにパターンを追加しfoo.htmlました。webapp/resources/ディレクトリにあるリソースを含めましょう
@Configuration
@EnableWebMvc
public class StaticResourceConfiguration implements WebMvcConfigurer {

    @Override
    public void addResourceHandlers(ResourceHandlerRegistry registry) {
        System.out.println("WebMvcConfigurer - addResourceHandlers() function get loaded...");
        registry.addResourceHandler("/resources/static/**")
                .addResourceLocations("/resources/");

        registry
            .addResourceHandler("/js/**")
            .addResourceLocations("/js/")
            .setCachePeriod(3600)
            .resourceChain(true)
            .addResolver(new GzipResourceResolver())
            .addResolver(new PathResourceResolver());
    }
}

XML設定

<mvc:annotation-driven />
  <mvc:resources mapping="/staticFiles/path/**" location="/staticFilesFolder/js/"
                 cache-period="60"/>

ファイルがWARのwebapp / resourcesフォルダーにある場合、Spring Boot MVC静的コンテンツ

spring.mvc.static-path-pattern=/resources/static/**
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.