Der Typ WebMvcConfigurerAdapter ist veraltet


116

Ich migriere gerade zur Spring MVC-Version, 5.0.1.RELEASEaber plötzlich wird in Eclipse STS WebMvcConfigurerAdapter als veraltet markiert

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/");
    }
  ....
  }

Wie kann ich das entfernen!

Antworten:


226

Seit Spring 5 müssen Sie nur noch die Schnittstelle implementieren WebMvcConfigurer:

public class MvcConfig implements WebMvcConfigurer {

Dies liegt daran, dass Java 8 Standardmethoden für Schnittstellen eingeführt hat, die die Funktionalität der WebMvcConfigurerAdapterKlasse abdecken

Siehe hier:

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


1
Was wäre, wenn ich hätte, super.configureMessageConverters(converters)wie kann ich diesen Code jetzt übersetzen? Jetzt gibt es kein superBezug mehr.
versuchenHard

1
@yami Sie rufen einfach configureMessageConverters (Konverter) auf. Dadurch wird die auf der Schnittstelle definierte Standardmethode ausgeführt
Plog

@Plog, @Yami: Wenn Sie wie vorgeschlagen vorgehen, wird eine java.lang.StackOverflowError, da das Weglassen .supereiner rekursiven, nie endenden Aufrufschleife weggelassen wird.
ThirstForKnowledge

2
Durch Hinzufügen von Konvertern zur Liste wird die Standardkonverterregistrierung deaktiviert. Wenn Sie zuerst super.configureMessageConverters (Konverter) aufrufen, möchten Sie wahrscheinlich den Standardkonverter beibehalten. Um einfach einen Konverter hinzuzufügen, ohne die Standardregistrierung zu beeinträchtigen, sollten Sie stattdessen die Methode extendMessageConverters(java.util.List)( docs.spring.io/spring/docs/current/javadoc-api/org/… ) verwenden.
ThirstForKnowledge

1
@ ThirstForKnowledge Oh, das ist mein schlechtes. Die Art und Weise, wie Sie eine Super-Standardmethode für eine Schnittstelle aufrufen sollten, ist: WebMvcConfigurer.super.configureMessageConverters (Konverter)
Plog

7

Ich habe an einer Swagger-äquivalenten Dokumentationsbibliothek gearbeitet, die Springfoxheutzutage aufgerufen wird , und festgestellt, dass in Spring 5.0.8 (derzeit ausgeführt) die Schnittstelle WebMvcConfigurernach Klassenklassen implementiert wurde WebMvcConfigurationSupport, die wir direkt erweitern können.

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

public class WebConfig extends WebMvcConfigurationSupport { }

Und so habe ich es verwendet, um meinen Ressourcenhandhabungsmechanismus wie folgt einzustellen:

@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

Verwenden org.springframework.web.servlet.config.annotation.WebMvcConfigurer

Gehen Sie mit Spring Boot 2.1.4.RELEASE (Spring Framework 5.1.6.RELEASE) folgendermaßen vor

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

Im Frühjahr wird jede Anfrage über das DispatcherServlet abgewickelt . Um statische Dateianforderungen über DispatcherServlet (Front-Controller) zu vermeiden, konfigurieren wir statischen MVC-Inhalt .

Feder 3.1. führte die ResourceHandlerRegistry ein, um ResourceHttpRequestHandlers für die Bereitstellung statischer Ressourcen aus dem Klassenpfad, der WAR oder dem Dateisystem zu konfigurieren. Wir können die ResourceHandlerRegistry programmgesteuert in unserer Webkontext-Konfigurationsklasse konfigurieren.

  • wir haben den zusätzlichen /js/**Muster auf das ResourceHandler, lässt die umfassen foo.jsRessource in der Lagewebapp/js/ Verzeichnis aufnehmen
  • Wir haben das /resources/static/**Muster dem ResourceHandler hinzugefügt. Lassen Sie uns die foo.htmlRessource in daswebapp/resources/ Verzeichnis aufnehmen
@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-Konfiguration

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

Spring Boot MVC Static Content, wenn sich die Datei im Ordner webapp / resources von WAR befindet .

spring.mvc.static-path-pattern=/resources/static/**
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.