攔截器配置類使用繼承寫法導致jackson的全局配置失效


問題描述

項目中需要一個攔截器用於攔截請求,在沒有請求中生成requestId。然后寫了一個配置類,這個類繼承了 WebMvcConfigurationSupport類,重寫了addInterceptors 方法,來實現攔截器的注冊。正當一切順利的時候,我發現我jackson的全局配置失效了。

該配置類的寫法

@Configuration
public class MvcInterceptorConfig extends WebMvcConfigurationSupport {
    @Resource
    private RequestContextInterceptor requestContextInterceptor;

    @Override
    protected void addInterceptors(InterceptorRegistry registry) {
        registry.addInterceptor(requestContextInterceptor).addPathPatterns("/api/**");
        super.addInterceptors(registry);
    }
}

原因

后來通過一系列的搜索,發現別人也有和我一樣的問題
第一篇文章可以參考這個: https://www.cnblogs.com/anemptycup/p/11313481.html。我意識到可能是我攔截器配置導致的問題。

資料上講,自定義WebMvcConfigur之后,原有properties中的jackson配置會失效。所以必須在自定義實現類中再次對jackson的配置進行補充。查詢資料的過程中,看到有的文章提到需要將注解@EnableWebMvc去掉。但是我們的項目中並不顯式的包含這個注解,相信可能有部分人跟我一樣在看到這個解決方案時並不知道如何對項目進行更改

解決

既然是因為自定義WebMvcConfigur導致的問題,那我不自定義WebMvcConfigur,有沒有其它注冊攔截器的方法呢? 顯然是有的。

另一種注冊攔截器的方法。寫一個配置類,實現WebMvcConfigurer接口也可以實現注冊攔截器

@Configuration
public class MvcInterceptorConfig implements WebMvcConfigurer {
    @Resource
    private RequestContextInterceptor requestContextInterceptor;

    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        registry.addInterceptor(requestContextInterceptor)
                .addPathPatterns("/api/**")
                .excludePathPatterns("/static/**");
    }
}

采用新的攔截器注冊方法否,成功實現攔截器注冊,和Jackson的全局配置。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM