我有一个用于网络的Spring Boot问候世界,并对配置有些困惑:
spring版本:1.2.6.RELEASE
我需要提供一些静态内容,因此我决定在一些自定义WebConfig类中重新定义此类内容的源目录(出于研究目的):
Javadoc @EnableWebMvc说:
将此注释添加到@Configuration类中,即可从WebMvcConfigurationSupport 导入Spring MVC 配置。
要自定义导入的配置,请实现接口WebMvcConfigurer或更可能扩展空方法基类WebMvcConfigurerAdapter并覆盖单个方法,例如:
因此,下一个配置类诞生了:
@Configuration @EnableWebMvc public class WebConfig extends WebMvcConfigurerAdapter { @Override public void addResourceHandlers(ResourceHandlerRegistry registry) { registry.addResourceHandler("/r/**").addResourceLocations("classpath:/static/r/"); registry.addResourceHandler("/favicon.ico").addResourceLocations("classpath:/static/r/favicon.ico"); } @Override public void addViewControllers(ViewControllerRegistry registry) { registry.addViewController("/").setViewName("forward:/r/diploma/index.html"); registry.setOrder(Ordered.HIGHEST_PRECEDENCE); super.addViewControllers(registry); } }
如果运行该应用程序并尝试访问http:// localhost:8080 /,则会收到下一个 异常:
javax.servlet.ServletException: Could not resolve view with name 'forward:/r/diploma/index.html' in servlet with name 'dispatcherServlet'
但是,如果我@EnableWebMvc从WebConfig中删除,则会在浏览器中找到index.html 。那么,这种行为的原因是什么呢?
其实我有我使用为例来研究生产项目,它既有@EnableWebMvc与WebMvcConfigurerAdapter上WebConfig。
您应该添加一个ViewResolver来解析中的视图WebConfig, 如下所示:
@Bean public InternalResourceViewResolver defaultViewResolver() { return new InternalResourceViewResolver(); }
添加时@EnableWebMvc,您将关闭所有Spring Boot的Web自动配置,这将自动 为您配置这样的解析器。通过删除注释,自动配置将再次打开, 自动配置ViewResolver解决了该问题。