[java] WebMvcConfigurerAdapter 유형은 더 이상 사용되지 않습니다.

나는 스프링 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/");
    }
  ....
  }

어떻게 제거 할 수 있습니까?



답변

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


답변

나는 Springfox현재 Swagger와 동등한 문서 라이브러리에서 작업 해 왔으며 Spring 5.0.8 (현재 실행 중)에서 인터페이스 WebMvcConfigurerWebMvcConfigurationSupport직접 확장 할 수있는 클래스 클래스에 의해 구현되었음을 발견했습니다 .

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


답변

사용하다 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();
    }

}


답변

Spring에서는 모든 요청이 DispatcherServlet을 통과합니다 . DispatcherServlet (Front contoller)을 통한 정적 파일 요청을 피하기 위해 MVC 정적 콘텐츠를 구성 합니다 .

봄 3.1. 클래스 경로, WAR 또는 파일 시스템에서 정적 리소스를 제공하기 위해 ResourceHttpRequestHandlers를 구성하기 위해 ResourceHandlerRegistry가 도입되었습니다. 웹 컨텍스트 구성 클래스 내에서 프로그래밍 방식으로 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"/>

파일이 WAR의 webapp / resources 폴더 에있는 경우 Spring Boot MVC 정적 콘텐츠 .

spring.mvc.static-path-pattern=/resources/static/**


답변