SpringBoot配置WebMvc
SpringBoot对Spring MVC的会进行自动配置,这些默认的配置可以满足我们的大部分需求,但是我们对Spring MVC有时会有一些自己的需求定制,对此我们也可以通过自定义配置类(标注@Configuration注解的类)并实现 WebMvcConfigurer接口来定制 SpringMVC 配置,例如拦截器、格式化程序、视图控制器等等。
WebMvcConfigurer 是一个基于 Java 8 的接口,该接口定义了许多与 Spring MVC 相关的方法,其中大部分方法都是 default 类型的,且都是空实现。因此我们只需要定义一个配置类实现 WebMvcConfigurer 接口,并重写相应的方法便可以定制 Spring MVC 的配置。
在SpringBoot项目中,我们可以通过拓展SpringMVC和全面接管Spring MVC这两种方式来定制Spring MVC.
- 拓展Spring MVC
如果SpringBoot对Spring MVC的自动配置不能满足我们的需求的话,我们还可以通过实现 WebMvcConfigurer接口的配置类(implements WebMvcConfigurer
),并加上@Configuration 注解来拓展Spring MVC。这样不仅能够保留Spring Boot的Spring MVC的自动的默认配置,还可以额外增加自己的配置。
@Configuration
public class WebMvcConfig implements WebMvcConfigurer {
/**
* 设置静态资源映射
* @param registry
*/
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
log.info("开始进行静态资源映射...");
registry.addResourceHandler("/backend/**").addResourceLocations("classpath:/backend/");
registry.addResourceHandler("/front/**").addResourceLocations("classpath:/front/");
}
}
- 全面接管Spring MVC
这个用法其实用得非常少,大家了解一下就好了。
在一些特殊的情况下,我们可能先要抛弃Spring Boot对Spring Boot的全部的自动配置,完全接管Spring MVC。此时我们可以自定义一个WebMvcConfigurer 的配置类,并在该类上标注@EnableWebMvc 注解 来实现完全接管Spring MVC 。(注意:完全接管Spring MVC后,SpringBoot对Spring MVC的自动配置将要全部失效。并且我们还要知道,Spring Boot 能够访问位于静态资源文件夹中的静态文件,这是因为 Spring Boot 对 Spring MVC 的默认自动配置中定义的,当我们全面接管 Spring MVC 后,Spring Boot 对 Spring MVC 的默认配置都会失效,此时再访问静态资源文件夹中的静态资源就会报 404 错误。
小白补充:SpringBoot对SpringMVC的默认配置中,已经将static下的资源全部放行,而且访问的url中省略了/static
。
创建boot项目启动失败原因:
注意boot版本,创建完idea会默认使用它自动下载的最近maven,并且由于.mvn文件夹的存在,在setting设置中手动更改maven后idea还会自动改回去,所以需要
- 手工删除.mvn文件夹后,再更改maven配置。
- (修改pom文件中boot版本)然后点击导入maven依赖。
- 项目启动成功。