Тип WebMvcConfigurerAdapter устарел.

116

Я просто перехожу на весеннюю версию 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

Plog
источник
1
Что, если бы у меня было, super.configureMessageConverters(converters)как теперь я могу перевести этот код? Теперь не superна что ссылаться.
tryHard
1
@yami Вы просто вызываете configureMessageConverters (преобразователи), это запустит метод по умолчанию, определенный в интерфейсе
Plog
@Plog, @Yami: Выполнение предложенных действий приводит к возникновению java.lang.StackOverflowError, поскольку при отсутствии начала .superначинается рекурсивный, бесконечный цикл вызовов.
ThirstForKnowledge
2
Добавление конвертеров в список отключает регистрацию конвертеров по умолчанию. Вызвав сначала super.configureMessageConverters (преобразователи), вы, вероятно, захотите сохранить преобразователь по умолчанию. Чтобы просто добавить конвертер, не влияя на регистрацию по умолчанию, рассмотрите возможность использования вместо этого метода extendMessageConverters(java.util.List)( docs.spring.io/spring/docs/current/javadoc-api/org/… ).
ThirstForKnowledge
1
@ThirstForKnowledge О, это моя проблема. Вы должны вызвать супер-метод по умолчанию для интерфейса следующим образом: WebMvcConfigurer.super.configureMessageConverters (converters)
Plog
7

Я работал над эквивалентной библиотекой документации Swagger, которая называется Springfoxсейчас, и обнаружил, что в 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

Весной каждый запрос будет проходить через DispatcherServlet . Чтобы избежать запроса статического файла через DispatcherServlet (Front contoller), мы настраиваем статический контент MVC .

Весна 3.1. представил ResourceHandlerRegistry для настройки ResourceHttpRequestHandlers для обслуживания статических ресурсов из пути к классам, WAR или файловой системы. Мы можем настроить ResourceHandlerRegistry программно внутри нашего класса конфигурации веб-контекста.

  • мы добавили /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"/>

Статическое содержимое Spring Boot MVC, если файл находится в папке WAR webapp / resources .

spring.mvc.static-path-pattern=/resources/static/**
Яш
источник