EnableWebMvc throws ServletException: Could not resolve view with name

烈酒焚心 提交于 2019-12-22 10:26:33

问题


Playing around with Spring Boot + MVC with static HTML pages, while noticed this thing:

Firstly, what I have:

Index controller:

@Controller
public class IndexController {

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

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

The Html file is:...\src\main\resources\static\index.html

So when my main application class is:

@SpringBootApplication
public class MyApplication extends WebMvcConfigurerAdapter {

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

Everything works well and in default path: localhost:8080\ I get index.html page content

But if I annotate Application class with @EnableWebMvc

@SpringBootApplication
@EnableWebMvc
public class MyApplication extends WebMvcConfigurerAdapter {

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

I get exception: javax.servlet.ServletException: Could not resolve view with name 'index.html' in servlet with name 'dispatcherServlet' But according to this spring doc it is a valid configuration.

Maybe someone can explain me why? Do I understand something wrong?


回答1:


According to spring-boot's docs

The auto-configuration adds the following features on top of Spring’s defaults:

  • Static index.html support.

...

If you want to keep Spring Boot MVC features, and you just want to add additional MVC configuration (interceptors, formatters, view controllers etc.) you can add your own @Configuration class of type WebMvcConfigurerAdapter, but without @EnableWebMvc. If you wish to provide custom instances of RequestMappingHandlerMapping, RequestMappingHandlerAdapter or ExceptionHandlerExceptionResolver you can declare a WebMvcRegistrationsAdapter instance providing such components.

So by adding @EnableWebMvc you just disable what spring-boot autoconfiguring for you. Namely static index.html support.




回答2:


Actually I think when you choose to use spring boot you should use the default config of spring Boot. It means you just have to edit the file application.properties. Now if you use spring mvc, you have to provide your own servlet. So I think mixing up the to is not a good idea. Either you use spring Boot wiht no much config to do or you use spring mvc and you make all the necessary config.




回答3:


According to Spring Boot MVC structure, you should locate your html file in the templates folder. Then will be visible for Spring Boot

src\main\resources\templates\index.html


来源:https://stackoverflow.com/questions/41543549/enablewebmvc-throws-servletexception-could-not-resolve-view-with-name

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!