Typ WebMvcConfigurerAdapter jest przestarzały


116

Po prostu 5.0.1.RELEASEmigruję do wiosennej wersji mvc, ale nagle w eclipse STS WebMvcConfigurerAdapter jest oznaczony jako przestarzały

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

Jak mogę to usunąć!

Odpowiedzi:


227

Od wiosny 5 wystarczy zaimplementować interfejs WebMvcConfigurer:

public class MvcConfig implements WebMvcConfigurer {

Dzieje się tak, ponieważ Java 8 wprowadziła domyślne metody w interfejsach, które obejmują funkcjonalność WebMvcConfigurerAdapterklasy

Spójrz tutaj:

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


1
A co gdybym miał, super.configureMessageConverters(converters)jak mogę teraz przetłumaczyć ten kod? Teraz nie ma się superdo czego odwołać.
trudne

1
@yami Po prostu wywołaj configureMessageConverters (konwertery), to uruchomi domyślną metodę zdefiniowaną w interfejsie
Plog

@Plog, @Yami: Postępowanie zgodnie z sugestią daje wynik java.lang.StackOverflowError, ponieważ pominięcie początku .superrozpoczyna cykliczną, niekończącą się pętlę wywołań.
ThirstForKnowledge

2
Dodanie konwerterów do listy wyłącza domyślną rejestrację konwerterów. Wywołując najpierw super.configureMessageConverters (konwertery), prawdopodobnie chcesz zachować domyślny konwerter. Aby po prostu dodać konwerter bez wpływu na domyślną rejestrację, rozważ użycie metody extendMessageConverters(java.util.List)( docs.spring.io/spring/docs/current/javadoc-api/org/… ).
ThirstForKnowledge

1
@ThirstForKnowledge Och, to moja wina. Sposób, w jaki powinieneś wywołać super domyślną metodę w interfejsie, to: WebMvcConfigurer.super.configureMessageConverters (konwertery)
Plog

7

Pracowałem nad Springfoxdzisiejszą biblioteką dokumentacji odpowiednika Swaggera i odkryłem, że w wiosennej wersji 5.0.8 (obecnie działającej) interfejs WebMvcConfigurerzostał zaimplementowany przez WebMvcConfigurationSupportklasę, którą możemy bezpośrednio rozszerzyć.

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

public class WebConfig extends WebMvcConfigurationSupport { }

I w ten sposób użyłem go do ustawienia mojego mechanizmu obsługi zasobów w następujący sposób -

@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

Posługiwać się org.springframework.web.servlet.config.annotation.WebMvcConfigurer

W przypadku Spring Boot 2.1.4.RELEASE (Spring Framework 5.1.6.RELEASE) zrób tak

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

Wiosną każde żądanie przejdzie przez DispatcherServlet . Aby uniknąć żądania pliku statycznego przez DispatcherServlet (front contoller), konfigurujemy zawartość statyczną MVC .

Wiosna 3.1. wprowadził ResourceHandlerRegistry, aby skonfigurować ResourceHttpRequestHandlers do obsługi zasobów statycznych ze ścieżki klas, WAR lub systemu plików. Możemy programowo skonfigurować ResourceHandlerRegistry w naszej klasie konfiguracji kontekstu WWW.

  • dodaliśmy /js/**wzorzec do ResourceHandler, pozwala uwzględnić foo.jszasób znajdujący się wwebapp/js/katalogu
  • dodaliśmy /resources/static/**wzorzec do ResourceHandler, pozwala uwzględnić foo.htmlzasób znajdujący się w webapp/resources/katalogu
@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());
    }
}

Konfiguracja XML

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

Spring Boot MVC Static Content, jeśli plik znajduje się w folderze webapp / resources WAR .

spring.mvc.static-path-pattern=/resources/static/**
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.