복붙노트

[SPRING] WebMvcConfigurerAdapter가 작동하지 않습니다.

SPRING

WebMvcConfigurerAdapter가 작동하지 않습니다.

이것은 내가 수행중인 WebConfig 코드입니다.

package hello.config;

import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.EnableWebMvc;
import org.springframework.web.servlet.config.annotation.ViewControllerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;

@Configuration
public class WebConfig extends WebMvcConfigurerAdapter {

    @Override
    public void addViewControllers(ViewControllerRegistry registry) {
        registry.addViewController("/greeting").setViewName("greeting");
    }
}

그리고 이것은 내 Application.class입니다.

package hello;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.builder.SpringApplicationBuilder;
import org.springframework.boot.context.web.SpringBootServletInitializer;
import org.springframework.web.servlet.config.annotation.EnableWebMvc;

@SpringBootApplication
public class Application extends SpringBootServletInitializer{

    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }

    @Override
    protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
        return application.sources(Application.class);
    }

}

이 클래스 메소드가 일부 시스템에서 호출되지 않는 것은 스프링 부트 이슈 인 것 같습니다. 해당 문제는 다음에서보고됩니다. https://github.com/spring-projects/spring-boot/issues/2870

내 질문은이 클래스 외부의이 클래스에 매핑 된 리소스를 임시 해결 방법으로 매핑 할 수 있는가하는 것입니다.

그렇다면 어떻게해야합니까?

업데이트 : Andy Wilkinson의 제안에 따라 @EnableWebMvc를 제거하고 데모 응용 프로그램이 작동하기 시작했습니다. 그런 다음 프로젝트 파일을 하나씩 스트립하여 오류가 사라지는 지점을 확인했습니다. 프로젝트에 두 개의 클래스가 있다는 것을 알았습니다. 하나는 WebMvcConfigurationSupport에서, 두 번째는 WebMvcConfigurerAdapter에서 확장되었습니다. 이전 클래스를 프로젝트에서 제거하면 오류가 수정되었습니다.

내가 알고 싶은 것은 왜 이런 일이 일어 났는가하는 것입니다. 둘째, 왜이 오류가 모든 시스템에 나타나지 않습니까?

해결법

  1. ==============================

    1.문제는 WebConfig가 config 패키지에 있고 Application이 hello 패키지에 있다는 것입니다. Application의 @SpringBootApplication은 선언 된 패키지 및 해당 패키지의 하위 패키지에 대한 구성 요소 검색을 가능하게합니다. 이 경우 hello는 구성 요소 검색을위한 기본 패키지이므로 구성 패키지의 WebConfig는 절대로 발견되지 않습니다.

    문제는 WebConfig가 config 패키지에 있고 Application이 hello 패키지에 있다는 것입니다. Application의 @SpringBootApplication은 선언 된 패키지 및 해당 패키지의 하위 패키지에 대한 구성 요소 검색을 가능하게합니다. 이 경우 hello는 구성 요소 검색을위한 기본 패키지이므로 구성 패키지의 WebConfig는 절대로 발견되지 않습니다.

    문제를 해결하기 위해 WebConfig를 hello 패키지 나 하위 패키지 (예 : hello.config)로 이동 시켰습니다.

    GitHub의 최신 업데이트로 WebConfig가 WebMvcConfigurerAdapter를 확장하여 WebMvcConfigurationSupport를 확장하는 것으로 변경되었습니다. WebMvcConfigurationSupport는 @EnableWebMvc에서 가져온 클래스이므로 @EnableWebMvc로 클래스에 주석을 달고 WebMvcConfigurationSupport를 확장하면 사물을 두 번 구성하게됩니다. 이전과 마찬가지로 WebMvcConfigurerAdapter를 다시 확장해야합니다.

  2. from https://stackoverflow.com/questions/30910642/webmvcconfigureradapter-does-not-work by cc-by-sa and MIT license