Le type WebMvcConfigurerAdapter est obsolète


116

Je viens de migrer vers la version mvc de printemps 5.0.1.RELEASEmais soudainement dans eclipse STS WebMvcConfigurerAdapter est marqué comme obsolète

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

Comment puis-je supprimer cela!

Réponses:


227

Depuis Spring 5, il vous suffit d'implémenter l'interface WebMvcConfigurer:

public class MvcConfig implements WebMvcConfigurer {

En effet, Java 8 a introduit des méthodes par défaut sur les interfaces qui couvrent les fonctionnalités de la WebMvcConfigurerAdapterclasse

Vois ici:

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


1
Et si j'avais super.configureMessageConverters(converters)comment puis-je traduire ce code maintenant? Maintenant, il n'y a pas superde référence.
essayantHard

1
@yami Vous appelez simplement configureMessageConverters (convertisseurs) cela exécutera la méthode par défaut définie sur l'interface
Plog

@Plog, @Yami: Faire comme suggéré produit un java.lang.StackOverflowError, parce que l'omission du .superdébut d'une boucle d'appel récursive et sans fin.
ThirstForKnowledge

2
L'ajout de convertisseurs à la liste désactive l'enregistrement du convertisseur par défaut. En appelant d'abord super.configureMessageConverters (convertisseurs), vous souhaiterez probablement conserver le convertisseur par défaut. Pour simplement ajouter un convertisseur sans affecter l'inscription par défaut, envisagez d'utiliser la méthode extendMessageConverters(java.util.List)( docs.spring.io/spring/docs/current/javadoc-api/org/… ) à la place.
ThirstForKnowledge

1
@ThirstForKnowledge Oh c'est mon mal. La façon dont vous devez appeler une méthode super par défaut sur une interface est la suivante: WebMvcConfigurer.super.configureMessageConverters (convertisseurs)
Plog

7

J'ai travaillé sur la bibliothèque de documentation équivalente à Swagger appelée de Springfoxnos jours et j'ai trouvé que dans le Spring 5.0.8 (en cours d'exécution actuellement), l'interface WebMvcConfigurera été implémentée par classe de WebMvcConfigurationSupportclasse que nous pouvons directement étendre.

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

public class WebConfig extends WebMvcConfigurationSupport { }

Et voici comment je l'ai utilisé pour définir mon mécanisme de gestion des ressources comme suit -

@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

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

Avec Spring Boot 2.1.4.RELEASE (Spring Framework 5.1.6.RELEASE), faites comme ceci

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

Au printemps, chaque demande passera par le DispatcherServlet . Pour éviter la demande de fichier statique via DispatcherServlet (contrôleur frontal), nous configurons le contenu MVC Static .

Printemps 3.1. a introduit ResourceHandlerRegistry pour configurer ResourceHttpRequestHandlers pour servir des ressources statiques à partir du chemin de classe, du WAR ou du système de fichiers. Nous pouvons configurer ResourceHandlerRegistry par programme dans notre classe de configuration de contexte Web.

  • nous avons ajouté le /js/**modèle au ResourceHandler, incluons la foo.jsressource située dans le webapp/js/répertoire
  • nous avons ajouté le /resources/static/**modèle au ResourceHandler, incluons la foo.htmlressource située dans le webapp/resources/répertoire
@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());
    }
}

Configuration XML

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

Spring Boot MVC Static Content si le fichier se trouve dans le dossier webapp / resources du WAR .

spring.mvc.static-path-pattern=/resources/static/**
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.