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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 前端技术 > javascript >内容正文

javascript

SpringMVC配置类WebMvcConfigurerAdapter学习总结

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

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

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

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

使用WebMvcConfigurerAdapter提供的接口實現自定義配置項示例:

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 {//攔截器相關處理代碼logger.info("*********我是攔截器************");return true;} }

自定義配置類繼承WebMvcConfigurerAdapter接口實現接口的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

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

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

4.配置Formatter

當請求的參數中帶有日期的參數的時候,可以在此配置formatter使得接收到日期參數格式統一

@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();}});}

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

方案1:直接實現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");}}

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

參考資料:

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

超強干貨來襲 云風專訪:近40年碼齡,通宵達旦的技術人生

總結

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

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。