WebMvcConfigurerAdapter不起作用

时间:2015-06-18 08:50:34

标签: spring spring-mvc spring-boot

这是我正在处理的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);
    }

}

这似乎是一个Spring-boot问题,在某些系统中不会调用这些类方法。相应的问题报告在: https://github.com/spring-projects/spring-boot/issues/2870

我的问题是,我们可以将此类中映射的资源映射到此类之外作为临时解决方法吗?

如果是,我们该怎么做?

更新:根据Andy Wilkinson的建议,我删除了@EnableWebMvc,并且演示应用程序开始运行。然后我尝试逐个删除项目文件,以查看错误消失的点。我发现项目中有两个类,一个是WebMvcConfigurationSupport扩展而第二个是WebMvcConfigurerAdapter。从项目中删除前一个类修复了错误。

我想知道的是,为什么会这样?其次,为什么这个错误不会出现在所有系统上?

1 个答案:

答案 0 :(得分:8)

问题是WebConfig包含在config包中,而Application位于hello包中。 @SpringBootApplication Application允许对其声明的包和该包的子包进行组件扫描。在这种情况下,这意味着hello是组件扫描的基础包,因此永远不会找到WebConfig包中的config

要解决此问题,我将WebConfig移至hello包或子包中,例如hello.config

您对GitHub的最新更新已将WebConfigWebMvcConfigurerAdapter扩展为扩展WebMvcConfigurationSupportWebMvcConfigurationSupport是由@EnableWebMvc导入的类,因此使用@EnableWebMvc注释您的班级并扩展WebMvcConfigurationSupport将配置两次。您应该像往常一样延伸WebMvcConfigurerAdapter