SpringBoot系列——WebMvcConfigurer介绍

在上篇文章中,我们遇到了接口WebMvcConfigurer。今天就来大概看一下里面的方法都有什么吧。
为什么要使用WebMvcConfigurer?
WebMvcConfigurer是一个接口,提供很多自定义的拦截器,例如跨域设置、类型转化器等等。可以说此接口为开发者提前想到了很多拦截层面的需求,方便开发者自由选择使用。由于Spring5.0废弃了WebMvcConfigurerAdapter,所以WebMvcConfigurer继承了WebMvcConfigurerAdapter大部分内容。
WebMvcConfigurer方法介绍
由于内容太多,只展示3个关键的接口,用的比较少的,只是阐述下含义,不再详解,用的更少的,就不看了,毕竟十多个方法呢...
1.configurePathMatch(PathMatchConfigurer configurer)
这个用到的比较少,这个是和访问路径有关的。举个例子,比如说PathMatchConfigurer 有个配置是setUseTrailingSlashMatch(),如果设置为true的话(默认为true),后面加个斜杠并不影响路径访问,例如“/user”等同于“/user/"。我们在开发中很少在访问路径上搞事情,所以这个方法如果有需要的请自行研究吧。
2.configureContentNegotiation(ContentNegotiationConfigurer configurer)
这个东西直译叫做内容协商机制,主要是方便一个请求路径返回多个数据格式。ContentNegotiationConfigurer这个配置里面你会看到MediaType,里面有众多的格式。此方法不在多赘述。
3.configureAsyncSupport(AsyncSupportConfigurer configurer)
顾名思义,这是处理异步请求的。只能设置两个值,一个超时时间(毫秒,Tomcat下默认是10000毫秒,即10秒),还有一个是AsyncTaskExecutor,异步任务执行器。
4.configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer)
这个接口可以实现静态文件可以像Servlet一样被访问。
5.addFormatters(FormatterRegistry registry)
增加转化器或者格式化器。这边不仅可以把时间转化成你需要时区或者样式。还可以自定义转化器和你数据库做交互,比如传进来userId,经过转化可以拿到user对象。
6.addInterceptors(InterceptorRegistry registry)
盼望着,盼望着,你一个常用的方法来了。这个方法可以自定义写拦截器,并指定拦截路径。来,咱们写一个拦截器。
public class MyInterceptor implements HandlerInterceptor {
@Override
public boolean preHandle(HttpServletRequest request,
HttpServletResponse response, Object handler) throws Exception {
System.out.println("preHandle,ok,假设给你一个true,运行去吧");
return true;
}
@Override
public void postHandle(HttpServletRequest request,
HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
System.out.println("postHandle,ok,看看我什么时候运行的。");
}
@Override
public void afterCompletion(HttpServletRequest request,
HttpServletResponse response, Object handler, Exception ex) throws Exception {
System.out.println("afterCompletion,ok,看完不点个赞再走吗?");
}
}
然后配置一下:
@Configuration
public class MyConfigurer implements WebMvcConfigurer {
@Bean
public MyInterceptor getMyInterceptor(){
return new MyInterceptor();
}
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(this.getMyInterceptor())
.addPathPatterns("/abc","/configurePathMatch");
}
}
可以看出addPathPatterns()里面可以尝试添加多个路径,或者写成”/**“,包含所有路径都需要尝试拦截一下。
测试一下,输出:
preHandle,ok,假设给你一个true,运行去吧
===》执行业务逻辑===》
postHandle,ok,看看我什么时候运行的。
afterCompletion,ok,看完不点个赞再走吗?
7.addResourceHandlers(ResourceHandlerRegistry registry)
自定义资源映射。这个东西也比较常用,业务场景就是自己的服务器作为文件服务器,不利用第三方的图床,就需要一个虚拟路径映射到我们服务器的地址。值得一提的是,如果你的项目是war包启动,一般都是再Tomcat中配置一下(配置方法请百度);如果是jar包启动(SpringBoot经常用这种方式启动),就可以用到这个方法了。例如:
public void addResourceHandlers(ResourceHandlerRegistry registry) {
registry.addResourceHandler("/my/**")
.addResourceLocations("file:E:/my/");
super.addResourceHandlers(registry);
}
真实路径,wndows当服务器的情况下,前面一定要加上一个file:。
8.addCorsMappings(CorsRegistry registry)
这个是设置跨域问题的,几乎是每个后台服务器都需要配置的东西。我曾写过一篇文章,专门讲跨域问题和SpringBoot怎么配置的,请查询:
https://juejin.im/post/5cfe6367f265da1b9163887f
9.addViewControllers(ViewControllerRegistry registry)
这个方法可以实现,一个路径自动跳转到一个页面。不过现在多为前后端分离的项目,是不是可以把跳转路由的问题直接扔给前端。
后面还有七个:configureViewResolvers、addArgumentResolvers、addReturnValueHandlers、configureMessageConverters、extendMessageConverters、configureHandlerExceptionResolvers、extendHandlerExceptionResolvers。是在用的太少了,就不再看了。
小结
本篇先大概知道下这些都是什么方法,最重要的是知道了WebMvcConfigurer为我们再拦截层做了一些通用拦截器,方便开发者使用。当然也可以自己实现拦截器。最常用的是还是6、7、8。其他的以后有机会研究好了再更新。
SpringBoot系列——WebMvcConfigurer介绍的更多相关文章
- SpringBoot系列之日志框架介绍及其原理简介
SpringBoot系列之日志框架介绍及其原理简介 1.常用日志框架简介 市面上常用日志框架:JUL.JCL.jboss-logging.logback.log4j.log4j2.slf4j.etc. ...
- SpringBoot 系列教程之编程式事务使用姿势介绍篇
SpringBoot 系列教程之编程式事务使用姿势介绍篇 前面介绍的几篇事务的博文,主要是利用@Transactional注解的声明式使用姿势,其好处在于使用简单,侵入性低,可辨识性高(一看就知道使用 ...
- SpringBoot系列之i18n集成教程
目录 1.环境搭建 2.resource bundle资源配置 3.LocaleResolver类 4.I18n配置类 5.Thymeleaf集成 SpringBoot系统之i18n国际化语言集成教程 ...
- SpringBoot系列教程web篇之自定义异常处理HandlerExceptionResolver
关于Web应用的全局异常处理,上一篇介绍了ControllerAdvice结合@ExceptionHandler的方式来实现web应用的全局异常管理: 本篇博文则带来另外一种并不常见的使用方式,通过实 ...
- SpringBoot系列(八)分分钟学会Springboot多种解决跨域方式
SpringBoot系列(八) 分分钟学会SpringBoot多种跨域解决方式 往期推荐 SpringBoot系列(一)idea新建Springboot项目 SpringBoot系列(二)入门知识 s ...
- SpringBoot系列(十一)拦截器与拦截器链的配置与使用详解,你知道多少?
往期推荐 SpringBoot系列(一)idea新建Springboot项目 SpringBoot系列(二)入门知识 springBoot系列(三)配置文件详解 SpringBoot系列(四)web静 ...
- SpringBoot系列——利用系统环境变量与配置文件的分支选择实现“智能部署”
前言 通过之前的博客:SpringBoot系列——jar包与war包的部署,我们已经知道了如果实现项目的简单部署,但项目部署的时候最烦的是什么?修改成发布环境对应的配置!数据库连接地址.Eureka注 ...
- SpringBoot系列教程之Bean加载顺序之错误使用姿势辟谣
在网上查询 Bean 的加载顺序时,看到了大量的文章中使用@Order注解的方式来控制 bean 的加载顺序,不知道写这些的博文的同学自己有没有实际的验证过,本文希望通过指出这些错误的使用姿势,让观文 ...
- SpringBoot系列教程之Bean之指定初始化顺序的若干姿势
上一篇博文介绍了@Order注解的常见错误理解,它并不能指定 bean 的加载顺序,那么问题来了,如果我需要指定 bean 的加载顺序,那应该怎么办呢? 本文将介绍几种可行的方式来控制 bean 之间 ...
随机推荐
- Redis的学习之路
应用场景 1.作为缓存使用 (1)原始业务功能设计 秒杀 双十一.618 排队购票 (2)运营平台察觉到突发式高频访问热点 突发式热点新闻 (3)高频复杂的统计数据 在线直播 投票排行榜 2.附加功 ...
- 洛谷 P5662 纪念品
题目传送门 解题思路: 一道DP,完全背包,不过有点不同于模板.因为本题的每件物品可自由在不同的时间买卖,且不同时间价格不同. 这道题的关键在于要明白一个非常傻逼的性质,就是我在某天买了第i个物品,然 ...
- 读取word模板,填充数据后导出
一.需求说明 定期生成word报告,报告中含有文本.表格.图表等元素,依次获取进行替换,保留原有样式,生成新的word文档 二.引入依赖 <dependency> <groupId& ...
- MySQL实现免密登录和数据库无法启动问题
1. 进入MySQL安装的文件夹,打开my.ini配置文件,打开方式参考:https://www.cnblogs.com/leslie12956/p/11842956.html 2. 停止MysSQL ...
- vue项目开始 首页 part1
stylus 优点:css之中使用一些变量,方便我们快速编写css 项目中我们使用css开发的辅助工具帮助我们开发网站样式 安装:终端打开我们项目的文件夹 npm install stylus --s ...
- Qt5学习笔记(1)-环境配置(win+64bit+VS2013)
Qt5学习笔记(1)-环境配置 工欲善其事必先-不装-所以装软件 久不露面,赶紧打下酱油. 下载 地址:http://download.qt.io/ 这个小网页就可以下载到跟Qt有关的几乎所有大部分东 ...
- slideshare文档下载
if [ x"$1" = x1 ]; then for i in {1..46}; do url_i="https://image.slidesharecdn.com/b ...
- 吴裕雄--天生自然 PHP开发学习:表单 - 必需字段
<?php // 定义变量并默认设为空值 $nameErr = $emailErr = $genderErr = $websiteErr = ""; $name = $ema ...
- Python中的encode和decode
原文地址:http://www.cnblogs.com/tingyugetc/p/5727383.html 1.Python3中对文本和二进制数据进行了比较清晰的区分,文本总是 unicode ,由 ...
- Docker 三剑客--Machine
Machine 我们知道在多个集群服务环境下,安装管理Docker的容器,要使用的是Docker Swarm,而使用Docker Swarm的情况是在多个集群的服务器已经搭建好Docker环境的情况下 ...