Тип WebMvcConfigurerAdapter застарілий


116

Я просто переходжу на весняну версію mvc, 5.0.1.RELEASEале раптом у затемненні 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

З весни 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посилань.
пробуючи Гарда

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 (перетворювачі)
Plog

7

Я працюю над бібліотекою еквівалентної документації Swagger, яку називають Springfoxсьогодні, і я виявив, що навесні 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 (передній контролер), ми налаштовуємо статичний вміст MVC .

Весна 3.1. представив ResourceHandlerRegistry для налаштування ResourceHttpRequestHandlers для обслуговування статичних ресурсів з classpath, 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"/>

Статичний вміст весняного завантаження MVC, якщо файл знаходиться в папці webapp / ресурси ВОЙН.

spring.mvc.static-path-pattern=/resources/static/**
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.