O tipo WebMvcConfigurerAdapter está obsoleto


116

Acabei de migrar para a versão Spring mvc, 5.0.1.RELEASEmas de repente no eclipse STS WebMvcConfigurerAdapter está marcado como obsoleto

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

Como posso remover isso!

Respostas:


227

Desde o Spring 5, você só precisa implementar a interface WebMvcConfigurer:

public class MvcConfig implements WebMvcConfigurer {

Isso ocorre porque o Java 8 introduziu métodos padrão em interfaces que cobrem a funcionalidade da WebMvcConfigurerAdapterclasse

Veja aqui:

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


1
E se eu tivesse, super.configureMessageConverters(converters)como posso traduzir este código? Agora não há supercomo se referir.
tentando difícil de

1
@yami Basta chamar configureMessageConverters (conversores) para executar o método padrão definido na interface
Plog

@Plog, @Yami: Fazer como sugerido produz um java.lang.StackOverflowError, porque a omissão de .superinicia um loop de chamada recursivo e sem fim.
ThirstForKnowledge

2
Adicionar conversores à lista desativa o registro do conversor padrão. Ao chamar super.configureMessageConverters (conversores) primeiro, você provavelmente deseja manter o conversor padrão. Para simplesmente adicionar um conversor sem afetar o registro padrão, considere usar o método extendMessageConverters(java.util.List)( docs.spring.io/spring/docs/current/javadoc-api/org/… ).
ThirstForKnowledge

1
@ThirstForKnowledge Oh, isso é ruim. A maneira como você deve chamar um método super padrão em uma interface é: WebMvcConfigurer.super.configureMessageConverters (conversores)
Plog

7

Tenho trabalhado na biblioteca de documentação equivalente do Swagger chamada Springfoxhoje em dia e descobri que no Spring 5.0.8 (atualmente em execução), a interface WebMvcConfigurerfoi implementada por WebMvcConfigurationSupportclasse, que podemos estender diretamente.

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

public class WebConfig extends WebMvcConfigurationSupport { }

E é assim que eu usei para definir meu mecanismo de tratamento de recursos da seguinte maneira -

@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

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

Com Spring Boot 2.1.4.RELEASE (Spring Framework 5.1.6.RELEASE), faça assim

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

Na primavera, todos os pedidos passarão pelo DispatcherServlet . Para evitar a solicitação de arquivo estático por meio do DispatcherServlet (Contoller frontal), configuramos o conteúdo estático MVC .

Spring 3.1. introduziu ResourceHandlerRegistry para configurar ResourceHttpRequestHandlers para servir recursos estáticos do classpath, WAR ou sistema de arquivos. Podemos configurar o ResourceHandlerRegistry programaticamente dentro de nossa classe de configuração de contexto da web.

  • adicionamos o /js/**padrão ao ResourceHandler, vamos incluir o foo.jsrecurso localizado no webapp/js/diretório
  • adicionamos o /resources/static/**padrão ao ResourceHandler, vamos incluir o foo.htmlrecurso localizado no webapp/resources/diretório
@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());
    }
}

Configuração XML

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

Conteúdo estático do Spring Boot MVC se o arquivo estiver localizado na pasta webapp / resources do WAR .

spring.mvc.static-path-pattern=/resources/static/**
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.