在上篇文章中,咱们遇到了接口WebMvcConfigurer。今天就来大概看一下里面的方法都有什么吧。前端
WebMvcConfigurer是一个接口,提供不少自定义的拦截器,例如跨域设置、类型转化器等等。能够说此接口为开发者提早想到了不少拦截层面的需求,方便开发者自由选择使用。因为Spring5.0废弃了WebMvcConfigurerAdapter,因此WebMvcConfigurer继承了WebMvcConfigurerAdapter大部份内容。web
因为内容太多,只展现3个关键的接口,用的比较少的,只是阐述下含义,再也不详解,用的更少的,就不看了,毕竟十多个方法呢...数据库
这个用到的比较少,这个是和访问路径有关的。举个例子,好比说PathMatchConfigurer 有个配置是setUseTrailingSlashMatch(),若是设置为true的话(默认为true),后面加个斜杠并不影响路径访问,例如“/user”等同于“/user/"。咱们在开发中不多在访问路径上搞事情,因此这个方法若是有须要的请自行研究吧。后端
这个东西直译叫作内容协商机制,主要是方便一个请求路径返回多个数据格式。ContentNegotiationConfigurer这个配置里面你会看到MediaType,里面有众多的格式。此方法不在多赘述。跨域
顾名思义,这是处理异步请求的。只能设置两个值,一个超时时间(毫秒,Tomcat下默认是10000毫秒,即10秒),还有一个是AsyncTaskExecutor,异步任务执行器。服务器
这个接口能够实现静态文件能够像Servlet同样被访问。mvc
增长转化器或者格式化器。这边不只能够把时间转化成你须要时区或者样式。还能够自定义转化器和你数据库作交互,好比传进来userId,通过转化能够拿到user对象。app
盼望着,盼望着,你一个经常使用的方法来了。这个方法能够自定义写拦截器,并指定拦截路径。来,我们写一个拦截器。cors
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,看完不点个赞再走吗?
自定义资源映射。这个东西也比较经常使用,业务场景就是本身的服务器做为文件服务器,不利用第三方的图床,就须要一个虚拟路径映射到咱们服务器的地址。值得一提的是,若是你的项目是war包启动,通常都是再Tomcat中配置一下(配置方法请百度);若是是jar包启动(SpringBoot常常用这种方式启动),就能够用到这个方法了。例如:
public void addResourceHandlers(ResourceHandlerRegistry registry) { registry.addResourceHandler("/my/**") .addResourceLocations("file:E:/my/"); super.addResourceHandlers(registry); }
真实路径,wndows当服务器的状况下,前面必定要加上一个file:。
这个是设置跨域问题的,几乎是每一个后台服务器都须要配置的东西。我曾写过一篇文章,专门讲跨域问题和SpringBoot怎么配置的,请查询:
https://juejin.im/post/5cfe6367f265da1b9163887f
这个方法能够实现,一个路径自动跳转到一个页面。不过如今多为先后端分离的项目,是否是能够把跳转路由的问题直接扔给前端。
后面还有七个:configureViewResolvers、addArgumentResolvers、addReturnValueHandlers、configureMessageConverters、extendMessageConverters、configureHandlerExceptionResolvers、extendHandlerExceptionResolvers。是在用的太少了,就再也不看了。
本篇先大概知道下这些都是什么方法,最重要的是知道了WebMvcConfigurer为咱们再拦截层作了一些通用拦截器,方便开发者使用。固然也能够本身实现拦截器。最经常使用的是仍是六、七、8。其余的之后有机会研究好了再更新。