zoukankan      html  css  js  c++  java
  • spring mvc 通过拦截器记录请求数据和响应数据

    spring mvc 能过拦截器记录请求数据记录有很多种方式,主要有以下三种:

    1:过滤器

    2:HandlerInterceptor拦截器

    3:Aspect接口控制器

    但是就我个人所知要记录返回的数据,只能通过Aspect处理,以下是实现此需要的代码

    package com.qmtt.config;
    
    import java.util.Arrays;
    
    import org.aspectj.lang.ProceedingJoinPoint;
    import org.aspectj.lang.annotation.Around;
    import org.aspectj.lang.annotation.Aspect;
    import org.aspectj.lang.annotation.Pointcut;
    import org.slf4j.Logger;
    import org.slf4j.LoggerFactory;
    import org.springframework.context.annotation.Configuration;
    
    import com.qmtt.tools.JsonUtils;
    
    /***
     * 
     * @author wujf 拦截所有控制器的返回,记录响应报文
     */
    @Aspect
    @Configuration
    public class QmttAspect {
        private static final Logger log = LoggerFactory.getLogger(QmttAspect.class);
    
        public QmttAspect() {
        }
    
        // 不能拦截@RequestMapping,这样会导致swagger无法使用
        // @Pointcut("@annotation(org.springframework.web.bind.annotation.RequestMapping)")
        @Pointcut("execution(public * com.qmtt.controller.*.*(..))")
        public void pointCutMethod() {
        }
    
        // 声明环绕通知
        @Around("pointCutMethod()")
        public Object doAround(ProceedingJoinPoint pjp) throws Throwable {
            String controller = pjp.getTarget().getClass().getSimpleName();
            String method = pjp.getSignature().getName();
            String args = Arrays.toString(pjp.getArgs());
            log.info("<{}.{}>,请求参数:{}", controller, method, args);
            Object ret = pjp.proceed();
            log.info("响应数据:{}", JsonUtils.toJsonString(ret));
            return ret;
        }
    }

    有追求,才有动力!

    向每一个软件工程师致敬!

    by wujf

    mail:921252375@qq.com

  • 相关阅读:
    iBatis,第二次亲密接触
    微斯人,吾谁与归
    一个月了
    生命在于运动
    眼皮跳了好几天
    往返
    中病毒,学习批处理

    爱如潮水
    今天夏至
  • 原文地址:https://www.cnblogs.com/wujf/p/8337832.html
Copyright © 2011-2022 走看看