这是我正在使用的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
扩展的。从项目中删除前一个类可修复该错误。我想知道的是,为什么会这样?其次,为什么此错误没有出现在所有系统上?
最佳答案
问题在于WebConfig
在config
包中,而Application
在hello
包中。 @SpringBootApplication
上的Application
启用组件扫描以查找声明其的包以及该包的子包。在这种情况下,这意味着hello
是组件扫描的基本程序包,因此,永远不会在WebConfig
程序包中找到config
。
为了解决该问题,我将WebConfig
移到hello
包或子包中,例如hello.config
。
您在GitHub上的最新更新将WebConfig
从扩展WebMvcConfigurerAdapter
更改为扩展WebMvcConfigurationSupport
。 WebMvcConfigurationSupport
是@EnableWebMvc
导入的类,因此用@EnableWebMvc
注释您的类并扩展WebMvcConfigurationSupport
将配置两次。您应该像以前一样回到扩展WebMvcConfigurerAdapter
的位置。