利用spring aop拦截并获取@ResponseBody数据

来源:互联网 发布:淘宝网咖啡杯 编辑:程序博客网 时间:2024/06/14 12:17

拦截请求有很多种方法,最简单的用拦截器,但是拦截器并不能获取返回的数据(比如@ResponseBody),上网找了一段时间,可以利用spring的AOP特性拦截并获取,还能修改返回的数据。


  • 准备
<dependency>  <groupId>org.aspectj</groupId>  <artifactId>aspectjrt</artifactId>  <version>1.8.9</version></dependency><dependency>  <groupId>org.aspectj</groupId>  <artifactId>aspectjweaver</artifactId>  <version>1.8.9</version></dependency>
  • 拦截代码
package com.jujin.riskmanager.interceptor;import org.aopalliance.intercept.MethodInterceptor;import org.aopalliance.intercept.MethodInvocation;import com.fasterxml.jackson.databind.ObjectMapper;import com.jujin.common.JsonList;public class ResultInterceptor implements MethodInterceptor {    private final static ObjectMapper jsonMapper = new ObjectMapper();      @Override    public Object invoke(MethodInvocation invocation) throws Throwable {         Object result = invocation.proceed();           // 随意处理结果吧         System.out.println("After: result: "+ jsonMapper.writeValueAsString(result));          return result;    }}
  • spring配置
<!-- AOP --><bean id="controllerMethodInterceptor"          class="com.jujin.riskmanager.interceptor.ResultInterceptor"/>  <aop:config proxy-target-class="true">     <aop:pointcut id="controllerMethodPointcut" expression="execution(* com.jujin.riskmanager.controller..*(..)) and @annotation(org.springframework.web.bind.annotation.RequestMapping)"/>     <aop:advisor advice-ref="controllerMethodInterceptor" pointcut-ref="controllerMethodPointcut" />  </aop:config>
原创粉丝点击