我有一个针对Web的Spring Boot hello世界,并且对配置感到困惑:
Spring版本:1.2.6.RELEASE
我的项目结构:
我需要提供一些静态内容,因此我决定在某些自定义WebConfig
类中重新定义此类内容的源目录(用于学习目的):
@EnableWebMvc
的Javadoc说:
将此注释添加到@Configuration类可导入Spring WebMvcConfigurationSupport的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'
但是如果我从我的WebConfig中删除@EnableWebMvc
,我在浏览器中获取了我的index.html。
那么这种行为的原因是什么?
实际上我有一个生产项目,我以其为例进行研究,它同时具有@EnableWebMvc
& WebMvcConfigurerAdapter
上的WebConfig
。
答案 0 :(得分:5)
您应该添加rvm install 2.3.0
rvm use 2.3.0
gem install premailer
以在ViewResolver
中解析您的观看次数,如下所示:
WebConfig
当您添加@Bean
public InternalResourceViewResolver defaultViewResolver() {
return new InternalResourceViewResolver();
}
时,您将关闭所有弹簧启动的网络自动配置,这会自动为您配置这样的解析器。通过删除注释,自动配置将再次打开,自动配置@EnableWebMvc
可以解决问题。