拦截器配置类使用继承写法导致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的全局配置。

原文地址:https://www.cnblogs.com/mufeng3421/p/11415366.html

时间: 2024-11-02 16:03:51

拦截器配置类使用继承写法导致jackson的全局配置失效的相关文章

ssm框架拦截器

1.ssm框架的拦截器是在springmvc-servlet.xml配置文件中进行配置 <!-- 拦截器 --> <mvc:interceptors> <mvc:interceptor> <mvc:mapping path="/**" /> <bean class="cn.com.***.controller.common.SecurityInterceptor"> <!-- 不需要session验证

j2ee之struts2拦截器()

struts2的基本配置以及jar包的导入就不说了只写关键部分: <struts> <package name="userPackage" extends="struts-default"> <interceptors> <!-- 自己写的一个拦截器 --> <interceptor name="loginCheck" class="com.xinzhi.interceptor.My

转载 - Struts2拦截器配置

出处:http://blog.csdn.net/axin66ok/article/details/7321430 目录(?)[-] 理解拦截器 1 什么是拦截器 2 拦截器的实现原理 拦截器的配置 使用拦截器 自定义拦截器 1 实现拦截器类 2 使用自定义拦截器 自定义拦截器示例 1 问题描述 2 实现权限控制拦截器类 3 配置权限控制拦截器 4 运行调试 1. 理解拦截器 1.1. 什么是拦截器: 拦截器,在AOP(Aspect-Oriented Programming)中用于在某个方法或字段

struts自定义拦截器配置

配置自己的拦截器可以先参照下系统的拦截器是怎么配置的,首先打开struts-default.xml搜索下interceptor:系统里的拦截器有很多,拦截器都是放在堆栈里的,系统引用的是默认堆栈, <interceptor-stack name="defaultStack">: struts2.3版本下的默认堆栈里放有19个拦截器.我们随便找一个系统拦截器,找到那个类点进去,可以看到,系统的拦截器都继承自AbstractInterceptor,知道这些,那么我们可以自己创建

初学Struts2-自定义拦截器及其配置

自定义拦截器,首先新建一个继承自AbstractInterceptor类的类,然后重写intercept方法,代码如下 public class HelloInterceptor extends AbstractInterceptor { @Override public String intercept(ActionInvocation invocation) throws Exception { // TODO Auto-generated method stub System.out.pr

Struts2配置拦截器,struts2加载常量时的搜索顺序

1:struts2加载常量时的搜索顺序 1.Struts-default.xml 2.Struts-plugin.xml 3.Struts.xml 4.Struts-properties(自己创建的) 5.web.xml 如果在多个文件中配置了同一个常量,则后一个文件中配置的常量值会覆盖前面的文件配置的常量值 2:Struts2拦截器配置 1.在Struts.xml中配置一个默认请求的action <!-- 没有找到action时默认执行的action --> <default-acti

Struts2拦截器的配置

struts2拦截器interceptor的三种配置方法方法1. 普通配置法 <struts> <package name="struts2" extends="struts-default"> <interceptors> <interceptor name="myInterceptor" class="edu.zd.core.MyInterceptor"></inter

基于JavaConfig配置的拦截器使用

这两天遇到一个需求:在请求action时,校验一下签名的有效性.为了做到统一,在一处地方做校验而不是分散在各个action里做,就用到了拦截器.个人觉得spring mvc中的拦截器和asp.net里面的HttpModule非常类似,都可以在请求在匹配到action之前做拦截.其他的不多说,直接上干货. 这篇讲基于java config的拦截器的实现,具体怎么做呢,其实非常简单,只要两步就可以完成,最后我会附上源代码: 第一步:自定义拦截器.具体来说就是写一个实现HandlerIntercept

struts2拦截器interceptor的三种配置方法

struts2拦截器interceptor的三种配置方法方法1. 普通配置法 <struts>     <package name="struts2" extends="struts-default">         <interceptors>             <interceptor name="myInterceptor" class="edu.hust.interceptor.