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

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


1
내가이 있다면 super.configureMessageConverters(converters)지금이 코드를 변환 할 수 있습니까? 이제 super참조 할 것이 없습니다 .
tryingHard

1
@yami 그냥 configureMessageConverters (converters)를 호출하면 인터페이스에 정의 된 기본 메소드가 실행됩니다
Plog

@Plog, @Yami : 제안 된대로 수행하면를 생성합니다 java.lang.StackOverflowError.를 생략하면 .super반복적이고 끝나지 않는 호출 루프가 시작 되기 때문 입니다.
ThirstForKnowledge

2
목록에 변환기를 추가하면 기본 변환기 등록이 해제됩니다. super.configureMessageConverters (converters)를 먼저 호출하면 기본 변환기를 유지하고 싶을 것입니다. 기본 등록에 영향을주지 않고 변환기를 추가하려면 대신 메서드 extendMessageConverters(java.util.List)( docs.spring.io/spring/docs/current/javadoc-api/org/… )를 사용하는 것이 좋습니다.
ThirstForKnowledge

1
@ThirstForKnowledge 오 이건 내 잘못이야. 인터페이스에서 슈퍼 기본 메서드를 호출하는 방법은 다음과 같습니다. WebMvcConfigurer.super.configureMessageConverters (converters)
Plog

7

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

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

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/**
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.