日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 前端技术 > javascript >内容正文

javascript

SpringMVC配置类WebMvcConfigurerAdapter学习总结

發(fā)布時間:2024/4/14 javascript 41 豆豆
生活随笔 收集整理的這篇文章主要介紹了 SpringMVC配置类WebMvcConfigurerAdapter学习总结 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

WebMvcConfigurerAdapter配置類是spring提供的一種配置方式,采用javabean的方式替代傳統(tǒng)的基于xml的配置來對spring框架進(jìn)行自定義的配置。因此,在springboot提倡的基于注解的配置 && 采用約定大于配置的風(fēng)格下,當(dāng)需要進(jìn)行自定義配置的時候,便可以繼承WebMvcConfigurerAdapter這個抽象類,通過javabean來實(shí)現(xiàn)需要的配置。

WebMvcConfigurerAdapter是一個抽象類,只提供一些空的接口讓用戶去重寫。其提供的接口如下:

public abstract class WebMvcConfigurerAdapter implements WebMvcConfigurer {/*配置路徑匹配參數(shù)*/public void configurePathMatch(PathMatchConfigurer configurer) {}/*配置Web Service或REST API設(shè)計中內(nèi)容協(xié)商,即根據(jù)客戶端的支持內(nèi)容格式情況來封裝響應(yīng)消息體,如xml,json*/public void configureContentNegotiation(ContentNegotiationConfigurer configurer) {}/*配置路徑匹配參數(shù)*/public void configureAsyncSupport(AsyncSupportConfigurer configurer) {}/* 使得springmvc在接口層支持異步*/public void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer) {}/* 注冊參數(shù)轉(zhuǎn)換和格式化器*/public void addFormatters(FormatterRegistry registry) {}/* 注冊配置的攔截器*/public void addInterceptors(InterceptorRegistry registry) {}/* 自定義靜態(tài)資源映射*/public void addResourceHandlers(ResourceHandlerRegistry registry) {}/* cors跨域訪問*/public void addCorsMappings(CorsRegistry registry) {}/* 配置頁面直接訪問,不走接口*/public void addViewControllers(ViewControllerRegistry registry) {}/* 注冊自定義的視圖解析器*/public void configureViewResolvers(ViewResolverRegistry registry) {}/* 注冊自定義控制器(controller)方法參數(shù)類型*/public void addArgumentResolvers(List<HandlerMethodArgumentResolver> argumentResolvers) {}/* 注冊自定義控制器(controller)方法返回類型*/public void addReturnValueHandlers(List<HandlerMethodReturnValueHandler> returnValueHandlers) {}/* 重載會覆蓋掉spring mvc默認(rèn)注冊的多個HttpMessageConverter*/public void configureMessageConverters(List<HttpMessageConverter<?>> converters) {}/* 僅添加一個自定義的HttpMessageConverter,不覆蓋默認(rèn)注冊的HttpMessageConverter*/public void extendMessageConverters(List<HttpMessageConverter<?>> converters) {}/* 注冊異常處理*/public void configureHandlerExceptionResolvers(List<HandlerExceptionResolver> exceptionResolvers) {}/* 多個異常處理,可以重寫次方法指定處理順序等*/public void extendHandlerExceptionResolvers(List<HandlerExceptionResolver> exceptionResolvers) {} }

使用WebMvcConfigurerAdapter提供的接口實(shí)現(xiàn)自定義配置項(xiàng)示例:

1、注冊攔截器

首先編寫攔截器類

public class LoginInterceptor extends HandlerInterceptorAdapter {private static final Logger logger = LoggerFactory.getLogger(LoginInterceptor.class);@Overridepublic boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {//攔截器相關(guān)處理代碼logger.info("*********我是攔截器************");return true;} }

自定義配置類繼承WebMvcConfigurerAdapter接口實(shí)現(xiàn)接口的addInterceptors方法來配制我們自定義的攔截器

@Configuration public class WebConfig extends WebMvcConfigurerAdapter {/** 攔截器配置*/@Overridepublic void addInterceptors(InterceptorRegistry registry) {registry.addInterceptor(new LoginInterceptor()).addPathPatterns("/**");//注冊攔截器,并配置攔截路徑 }

2.配置CORS跨域

只需要在上面的webConfig里重寫WebMvcConfigurerAdapter的addCorsMappings方法就可以獲得基于spring的跨域支持。

/*** 跨域CORS配置* @param registry*/@Overridepublic void addCorsMappings(CorsRegistry registry) {super.addCorsMappings(registry);registry.addMapping("/**").allowedHeaders("*").allowedMethods("POST","GET").allowedOrigins("http://...").allowCredentials(true);}

3.配置ViewController

當(dāng)首頁或者登陸頁的頁面對外暴露,不需要加載任何的配置的時候,這些頁面將不通過接口層,而是直接訪問,這時,就需要配置ViewController指定請求路徑直接到頁面。

/*** 視圖控制器配置* @param registry*/@Overridepublic void addViewControllers(ViewControllerRegistry registry) {super.addViewControllers(registry);registry.addViewController("/").setViewName("forward:/index.html");}

4.配置Formatter

當(dāng)請求的參數(shù)中帶有日期的參數(shù)的時候,可以在此配置formatter使得接收到日期參數(shù)格式統(tǒng)一

@Overridepublic void addFormatters(FormatterRegistry registry) {registry.addFormatter(new Formatter<Date>() {@Overridepublic Date parse(String date, Locale locale) {return new Date(Long.parseLong(date));}@Overridepublic String print(Date date, Locale locale) {return Long.valueOf(date.getTime()).toString();}});}

以上應(yīng)用只適用于spring boot 2.0,Spring 5.0之前的版本,spring boot 2.0,Spring 5.0 以后WebMvcConfigurerAdapter會取消掉,高版本也提供了兩種解決方案:

方案1:直接實(shí)現(xiàn)WebMvcConfigurer

@Configuration public class WebMvcConfg implements WebMvcConfigurer {@Overridepublic void addViewControllers(ViewControllerRegistry registry) {registry.addViewController("/index").setViewName("index");}}

方案2: 直接繼承WebMvcConfigurationSupport

@Configuration public class WebMvcConfg extends WebMvcConfigurationSupport {@Overridepublic void addViewControllers(ViewControllerRegistry registry) {registry.addViewController("/index").setViewName("index");}}

其實(shí),源碼下WebMvcConfigurerAdapter是實(shí)現(xiàn)WebMvcConfigurer接口,所以直接實(shí)現(xiàn)WebMvcConfigurer接口也可以;WebMvcConfigurationSupport與WebMvcConfigurerAdapter、接口WebMvcConfigurer處于同一個目錄下,WebMvcConfigurationSupport包含WebMvcConfigurer里面的方法,高版本中推薦使用WebMvcConfigurationSupport類,其實(shí),源碼下WebMvcConfigurerAdapter是實(shí)現(xiàn)WebMvcConfigurer接口,所以直接實(shí)現(xiàn)WebMvcConfigurer接口也可以;WebMvcConfigurationSupport與WebMvcConfigurerAdapter、接口WebMvcConfigurer處于同一個目錄下,WebMvcConfigurationSupport包含WebMvcConfigurer里面的方法,高版本中推薦使用WebMvcConfigurationSupport類,其禁止了SpringBoot對mvc的自動配置,完全由用戶自己實(shí)現(xiàn)配置(不注意的話會遇到坑:springboot2.0、spring5.0 攔截器配置WebMvcConfigurerAdapter過時使用WebMvcConfigurationSupport來代替 新坑)。

參考資料:

Spring MVC 配置類 WebMvcConfigurerAdapter
spring boot攔截器WebMvcConfigurerAdapter,以及高版本的替換方案
@EnableWebMvc,WebMvcConfigurationSupport,WebMvcConfigurer和WebMvcConfigurationAdapter區(qū)別

超強(qiáng)干貨來襲 云風(fēng)專訪:近40年碼齡,通宵達(dá)旦的技術(shù)人生

總結(jié)

以上是生活随笔為你收集整理的SpringMVC配置类WebMvcConfigurerAdapter学习总结的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。