WebMvcConfigurerAdapter türü kullanımdan kaldırıldı


116

Sadece bahar mvc sürümüne 5.0.1.RELEASEgeçiyorum ama aniden tutulması STS WebMvcConfigurerAdapter kullanımdan kaldırıldı olarak işaretlendi

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

Bunu nasıl kaldırabilirim!

Yanıtlar:


227

İlkbahar 5'ten beri sadece arayüzü uygulamanız gerekiyor WebMvcConfigurer:

public class MvcConfig implements WebMvcConfigurer {

Bunun nedeni, Java 8'in WebMvcConfigurerAdaptersınıfın işlevselliğini kapsayan arayüzlerde varsayılan yöntemler sunmasıdır.

Buraya bakın:

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


1
Ya super.configureMessageConverters(converters)şimdi bu kodu nasıl çevirebilirim? Şimdi superdeğinilecek bir şey yok .
çalışıyorHard

1
@yami Sadece configureMessageConverters'ı (dönüştürücüler) çağırırsınız, bu arayüzde tanımlanan varsayılan yöntemi çalıştırır
Plog

@Plog, @Yami: Önerildiği gibi yapmak a üretir java.lang.StackOverflowError, çünkü .superbaşlangıçları atlamak özyinelemeli, asla bitmeyen bir çağrı döngüsüdür.
ThirstForKnowledge

2
Listeye dönüştürücüler eklemek, varsayılan dönüştürücü kaydını kapatır. Önce super.configureMessageConverters'ı (dönüştürücüler) çağırarak, muhtemelen varsayılan dönüştürücüyü korumak istersiniz. Varsayılan kaydı etkilemeden bir dönüştürücü eklemek için, bunun yerine yöntemi extendMessageConverters(java.util.List)( docs.spring.io/spring/docs/current/javadoc-api/org/… ) kullanmayı düşünün .
ThirstForKnowledge

1
@ThirstForKnowledge Oh bu benim hatam. Bir arabirimde bir süper varsayılan yöntemi çağırmanızın yolu: WebMvcConfigurer.super.configureMessageConverters (dönüştürücüler)
Plog

7

SpringfoxBugünlerde Swagger eşdeğer dokümantasyon kitaplığı üzerinde çalışıyorum ve Spring 5.0.8'de (şu anda çalışıyor) arayüzün doğrudan genişletebileceğimiz WebMvcConfigurersınıf WebMvcConfigurationSupportsınıfı tarafından uygulandığını gördüm .

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

public class WebConfig extends WebMvcConfigurationSupport { }

Kaynak işleme mekanizmamı aşağıdaki gibi ayarlamak için onu bu şekilde kullandım -

@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

kullanım org.springframework.web.servlet.config.annotation.WebMvcConfigurer

Spring Boot 2.1.4.RELEASE (Spring Framework 5.1.6.RELEASE) ile bunu yapın

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

İlkbaharda her istek DispatcherServlet'ten geçecek . DispatcherServlet (Ön denetleyici) aracılığıyla Statik dosya talebini önlemek için MVC Statik içeriğini yapılandırıyoruz .

İlkbahar 3.1. sınıf yolundan, WAR'dan veya dosya sisteminden statik kaynaklara hizmet vermek için ResourceHttpRequestHandlers'ı yapılandırmak için ResourceHandlerRegistry'i tanıttı. ResourceHandlerRegistry'i web bağlamı yapılandırma sınıfımız içinde programlı olarak yapılandırabiliriz.

  • /js/**kalıbı ResourceHandler'a ekledik foo.js, webapp/js/dizinde bulunan kaynağı dahil edelim
  • /resources/static/**kalıbı ResourceHandler'a ekledik foo.html, webapp/resources/dizinde bulunan kaynağı dahil edelim
@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 Yapılandırması

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

Spring Boot MVC Static Content , dosya WAR'ın webapp / resources klasöründe bulunuyorsa.

spring.mvc.static-path-pattern=/resources/static/**
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.