小编典典

EnableWebMvc引发ServletException:无法解析名称为的视图

spring-boot

使用带有静态HTML页面的Spring Boot + MVC玩耍,同时注意到这件事:

首先,我有:

索引控制器:

@Controller
public class IndexController {

    @RequestMapping("/")
    public String index() {
        return "index.html";
    }

    @RequestMapping("/{path:[^\\.]+}/**")
    public String forward() {
        return "forward:/";
    }
}

HTML文件是:...\src\main\resources\static\index.html

因此,当我的主要应用程序类是:

@SpringBootApplication
public class MyApplication extends WebMvcConfigurerAdapter {

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

一切正常,在默认路径下:localhost:8080\我得到index.html页面内容

但是如果我用 @EnableWebMvc

@SpringBootApplication
@EnableWebMvc
public class MyApplication extends WebMvcConfigurerAdapter {

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

我得到异常:javax.servlet.ServletException: Could not resolve view with name 'index.html' in servlet with name 'dispatcherServlet'
但是根据这个Spring文档,这是一个有效的配置。

也许有人可以解释我为什么?我了解不对吗?


阅读 528

收藏
2020-05-30

共1个答案

小编典典

根据spring-boot的文档

自动配置在Spring的默认值之上添加了以下功能:

  • 静态index.html支持。

如果您想保留Spring Boot
MVC功能,并且只想添加其他MVC配置(拦截器,格式化程序,视图控制器等),则可以添加自己@Configuration的type类
WebMvcConfigurerAdapter,但 不添加
@EnableWebMvc。如果您希望提供的自定义实例RequestMappingHandlerMapping
RequestMappingHandlerAdapter或者ExceptionHandlerExceptionResolver可以声明一个WebMvcRegistrationsAdapter提供此类组件的实例。

因此,通过添加@EnableWebMvc您只需禁用对您的spring-boot自动配置。即静态index.html支持。

2020-05-30