WebMvcConfigurerAdapter详解和过时后的替代方案

一、什么是WebMvcConfigurerAdapter

Spring内部的一种配置方式
采用JavaBean的形式来代替传统的xml配置文件形式进行针对框架个性化定制

二、WebMvcConfigurerAdapter常用的方法

/** 解决跨域问题 **/
public void addCorsMappings(CorsRegistry registry) ;

/** 添加拦截器 **/
void addInterceptors(InterceptorRegistry registry);

/** 这里配置视图解析器 **/
void configureViewResolvers(ViewResolverRegistry registry);

/** 配置内容裁决的一些选项 **/
void configureContentNegotiation(ContentNegotiationConfigurer configurer);

/** 视图跳转控制器 **/
void addViewControllers(ViewControllerRegistry registry);

/** 静态资源处理 **/
void addResourceHandlers(ResourceHandlerRegistry registry);

/** 默认静态资源处理器 **/
void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer);

1、addInterceptors:拦截器

  • addInterceptor:需要一个实现HandlerInterceptor接口的拦截器实例
  • addPathPatterns:用于设置拦截器的过滤路径规则

excludePathPatterns:用于设置不需要拦截的过滤规则

@Override
public void addInterceptors(InterceptorRegistry registry) {
        registry.addInterceptor(new MyInterceptor()).addPathPatterns("/**").excludePathPatterns("/toLogin","/login");
        super.addInterceptors(registry);
}

2、addCorsMappings:跨域

    @Override
    public void addCorsMappings(CorsRegistry registry) {
        registry.addMapping("/**").allowedOrigins("*").allowedMethods("POST", "GET", "PUT", "OPTIONS", "DELETE").maxAge(3600).allowCredentials(true);
    }

 3、addViewControllers:跳转指定页面

    /**
     * 以前要访问一个页面需要先创建个Controller控制类,在写方法跳转到页面
     * 在这里配置后就不需要那么麻烦了,直接访问http://localhost:8080/toLogin就跳转到login.html页面了
     *
     * @param registry
     */
    @Override
    public void addViewControllers(ViewControllerRegistry registry) {
        registry.addViewController("/toLogin").setViewName("login");
        registry.addViewController("/").setViewName("/index");
        registry.addViewController("/login").setViewName("forward:/index.html");
        super.addViewControllers(registry);
    }

4、resourceViewResolver:视图解析器

/**
 * 配置请求视图映射
 * @return
 */
@Bean
public InternalResourceViewResolver resourceViewResolver()
{
	InternalResourceViewResolver internalResourceViewResolver = new InternalResourceViewResolver();
	//请求视图文件的前缀地址
	internalResourceViewResolver.setPrefix("/WEB-INF/jsp/");
	//请求视图文件的后缀
	internalResourceViewResolver.setSuffix(".jsp");
	return internalResourceViewResolver;
}

/**
 * 视图配置
 * @param registry
 */
@Override
public void configureViewResolvers(ViewResolverRegistry registry) {
	super.configureViewResolvers(registry);
	registry.viewResolver(resourceViewResolver());
	/*registry.jsp("/WEB-INF/jsp/",".jsp");*/
}

5、configureMessageConverters:信息转换器

/**
* 消息内容转换配置
 * 配置fastJson返回json转换
 * @param converters
 */
@Override
public void configureMessageConverters(List<HttpMessageConverter<?>> converters) {
    //调用父类的配置
    super.configureMessageConverters(converters);
    //创建fastJson消息转换器
    FastJsonHttpMessageConverter fastConverter = new FastJsonHttpMessageConverter();
    //创建配置类
    FastJsonConfig fastJsonConfig = new FastJsonConfig();
    //修改配置返回内容的过滤
    fastJsonConfig.setSerializerFeatures(
            SerializerFeature.DisableCircularReferenceDetect,
            SerializerFeature.WriteMapNullValue,
            SerializerFeature.WriteNullStringAsEmpty
    );
    fastConverter.setFastJsonConfig(fastJsonConfig);
    //将fastjson添加到视图消息转换器列表内
    converters.add(fastConverter);

}

6、addResourceHandlers:静态资源

    @Override
    public void addResourceHandlers(ResourceHandlerRegistry registry) {
        //自定义项目内目录
        //registry.addResourceHandler("/my/**").addResourceLocations("classpath:/my/");
        //指向外部目录
        registry.addResourceHandler("/my/**").addResourceLocations("file:E:/my/");
        super.addResourceHandlers(registry);
    }

三、使用WebMvcConfigurerAdapter

1、过时方式:继承WebMvcConfigurerAdapter

 该方法在spring boot 2.0,Spring 5.0 之后,已经被废弃

@Configuration
public class WebConfig extends WebMvcConfigurerAdapter {
	//TODO
}

2、代替方案

 ①直接实现WebMvcConfigurer

@Configuration
public class WebMvcConfg implements WebMvcConfigurer {
	//TODO
}

②直接继承WebMvcConfigurationSupport

@Configuration
public class WebMvcConfg extends WebMvcConfigurationSupport {
	//TODO
}

查看源码发现: WebMvcConfigurerAdapter只是对WebMvcCofigurer的空实现

WebMvcConfigurationSupport与WebMvcConfigurerAdapter、接口WebMvcConfigurer处于同一个目录下

WebMvcConfigurationSupport包含WebMvcConfigurer里面的方法,且WebMvcConfigurationSupport的实现的方法更全面

但是继承WebMvcConfigurationSupport会发现Spring Boot的WebMvc自动配置失效(WebMvcAutoConfiguration自动化配置),导致无法视图解析器无法解析并返回到对应的视图。

关于使用新方案会出现的问题,可以参考下面这篇文章。

原文地址:https://www.cnblogs.com/sueyyyy/p/11608900.html

时间: 2024-10-11 09:02:22

WebMvcConfigurerAdapter详解和过时后的替代方案的相关文章

Hadoop3.1.1源码Client详解 : Packet入队后消息系统运作之DataStreamer(Packet发送) : 主干

该系列总览: Hadoop3.1.1架构体系——设计原理阐述与Client源码图文详解 : 总览 在上一章(Hadoop3.1.1源码Client详解 : 写入准备-RPC调用与流的建立) 我们提到,在输出流DFSOutputStream创建后,DataStreamer也随之创建,并且被启动 下文主要是围绕DataStreamer进行讲解 DataStreamer是一个守护线程类,继承关系如下.       观察DataStreamer的run方法,没有意外的,我们可以发现他和普通的做法一样,用

iOS疯狂详解之 登陆后淡入淡出更换rootViewController

- (void)restoreRootViewController:(UIViewController *)rootViewController { typedef void (^Animation)(void); UIWindow* window = self.window; rootViewController.modalTransitionStyle = UIModalTransitionStyleCrossDissolve; Animation animation = ^{ BOOL o

Influxdb原理详解

本文属于<InfluxDB系列教程>文章系列,该系列共包括以下 15 部分: InfluxDB学习之InfluxDB的安装和简介 InfluxDB学习之InfluxDB的基本概念 InfluxDB学习之InfluxDB的基本操作 InfluxDB学习之InfluxDB的HTTP API写入操作 InfluxDB学习之InfluxDB数据保留策略(Retention Policies) InfluxDB学习之InfluxDB连续查询(Continuous Queries) InfluxDB学习之

26.C++- 泛型编程之类模板(详解)

在上章25.C++- 泛型编程之函数模板(详解) 学习了后,本章继续来学习类模板   类模板介绍 和函数模板一样,将泛型思想应用于类. 编译器对类模板处理方式和函数模板相同,都是进行2次编译 类模板通常应用于数据结构方面,使得类的实现不在关注数据元素的具体类型,而只关注需要实现的功能 比如: 数组类,链表类,Queue类,Stack类等 使用方法 通过template关键字来声明,然后通过typename关键字来定义模板类型,如下图所示: 类模板的使用 定义对象时,必须指定类模板类型,因为编译器

新辰:详解首页被K后SEOer必做的三大排除方法!

近段时间,有很多朋友向新辰抱怨说出大问题了,为神马site不到首页了,而且收录变成了0?唉,新辰不得不很同情的告诉你:你的首页真的被K了!好了,作为一个职业SEOer,面对被K犹如已经看破红尘般没了脾气,所以,废话少说,身为SEOer的你赶紧补救吧!希望新辰的这些方法能够帮助你早日逃离拔毛的痛苦哦: 所谓治病先察言观色,后开方救人,新辰说的就是先找准病因,才能给出解决的办法.面对突然site不到首页的情况,请先保持冷静哦,然后需要先查看一下收录和排名怎么样了,索引量如何,蜘蛛日志的返回代码是多少

linux cat命令使用方法详解--把档案串连接后传到基本输出

linux cat命令使用方法详解--把档案串连接后传到基本输出 日期:2011-12-05 点击:2324 来源: 未知 分享至: 使用方式:cat [-AbeEnstTuv] [--help] [--version] fileName说明:把档案串连接后传到基本输出(萤幕或加 > fileName 到另一个档案)参数:-n 或 --number 由 1 开始对所有输出的行数编号-b 或 --number-nonblank 和 -n 相似,只不过对于空白行不编号-s 或 --squeeze-b

实例详解:反编译Android APK,修改字节码后再回编译成APK

本文详细介绍了如何反编译一个未被混淆过的Android APK,修改smali字节码后,再回编译成APK并更新签名,使之可正常安装.破译后的apk无论输入什么样的用户名和密码都可以成功进入到第二个Activity. 有时难免要反编译一个APK,修改其中的若干关键判断点,然后再回编译成一个全新的可用的apk,这完全是可实现的.若要完成上述工作,需要以下工具,杂家后面会把下载链接也附上.这些软件截止本文发布时,经过杂家确认都是最新的版本. 1.APK-Multi-Toolv1.0.11.zip 用它

Win7 在安装vs2010后向sql2008添加SQL_Server_Management详解

我们在安装好VS2010后,会发现VS2010自带了sql server 2008,但自带的版本缺少SQL_Server_Management,所以我们得自己安装这个,在网上找到了比较详细的步骤,如下: 安装的先决条件: 1.SQLManagementStudio_x86_CHS,这个可以自己到官网下载,如果需要的朋友可以给我留言 2.系统安装有.Net FrameWork3.5 sp1,我自己电脑上安装的是.Net FrameWork4 1.升级现有express(单击开始→Microsoft

详解首页被K后SEOer必做的三大排除方法!

近段时间,有很多朋友向新辰抱怨说出大问题了,为神马site不到首页了,而且收录变成了0?唉,新辰不得不很同情的告诉你:你的首页真的被K了!好了,作为一个职业SEOer,面对被K犹如已经看破红尘般没了脾气,所以,废话少说,身为SEOer的你赶紧补救吧!希望新辰的这些方法能够帮助你早日逃离拔毛的痛苦哦: 所谓治病先察言观色,后开方救人,新辰说的就是先找准病因,才能给出解决的办法.面对突然site不到首页的情况,请先保持冷静哦,然后需要先查看一下收录和排名怎么样了,索引量如何,蜘蛛日志的返回代码是多少