乐趣区

Spring-Boot配置接口WebMvcConfigurer

前言

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

退出移动版