前言
WebMvcConfigurer 配置类其实是 Spring 内部的一种配置方式,采用 JavaBean 的形式来代替传统的 xml 配置文件形式进行针对框架个性化定制。基于 java-based 方式的 spring mvc 配置,需要创建一个配置类并实现 WebMvcConfigurer
接口,WebMvcConfigurerAdapter 抽象类是对 WebMvcConfigurer 接口的简单抽象(增加了一些默认实现),但在在 SpringBoot2.0 及 Spring5.0 中 已被 废弃。WebMvcConfigurerAdapter
官方推荐直接实现 WebMvcConfigurer 或者直接继承 WebMvcConfigurationSupport
,
方式一实现 WebMvcConfigurer
接口(推荐)。
方式二继承 WebMvcConfigurationSupport
类【传送门】
WebMvcConfigurer
部分方法说明如下:
/* 拦截器配置 */
void addInterceptors(InterceptorRegistry var1);
/* 视图跳转控制器 */
void addViewControllers(ViewControllerRegistry registry);
/* 静态资源处理 */
void addResourceHandlers(ResourceHandlerRegistry registry);
/* 默认静态资源处理器 */
void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer);
/* 这里配置视图解析器 */
void configureViewResolvers(ViewResolverRegistry registry);
/* 配置内容裁决的一些选项 */
void configureContentNegotiation(ContentNegotiationConfigurer configurer);
页面跳转 addViewControllers
以前写 SpringMVC 的时候,如果需要访问一个页面,必须要写 Controller 类,然后再写一个方法跳转到页面,感觉好麻烦,其实重写 WebMvcConfigurer 中的 addViewControllers 方法即可达到效果了.
/**
* 以前要访问一个页面需要先创建个 Controller 控制类,再写方法跳转到页面
* 在这里配置后就不需要那么麻烦了,直接访问 http://localhost:8080/toLogin 就跳转到 login.jsp 页面了
* @param registry
*/
@Override
public void addViewControllers(ViewControllerRegistry registry) {registry.addViewController("/toLogin").setViewName("login");
}
自定义资源映射 addResourceHandlers
/**
* 配置静态访问资源
* @param registry
*/
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {registry.addResourceHandler("/my/**").addResourceLocations("classpath:/my/");
}
通过 addResourceHandler 添加映射路径,然后通过 addResourceLocations 来指定路径。我们访问自定义 my 文件夹中的 elephant.jpg 图片的地址为 http://localhost:8080/my/elephant.jpg
configureContentNegotiation
public void configureContentNegotiation(ContentNegotiationConfigurer configurer) {
/* 是否通过请求 Url 的扩展名来决定 media type */
configurer.favorPathExtension(true)
/* 不检查 Accept 请求头 */
.ignoreAcceptHeader(true)
.parameterName("mediaType")
/* 设置默认的 media yype */
.defaultContentType(MediaType.TEXT_HTML)
/* 请求以.html 结尾的会被当成 MediaType.TEXT_HTML*/
.mediaType("html", MediaType.TEXT_HTML)
/* 请求以.json 结尾的会被当成 MediaType.APPLICATION_JSON*/
.mediaType("json", MediaType.APPLICATION_JSON);
}
参考文章:
Spring Boot 配置接口 WebMvcConfigurer