• Spring项目方便调试打印请求信息点击跳转到方法


    之前用Jfinal框架,他有个和方便得小东西就是每次请求都会在控制台打印出来,

    点击还能跳转到方法类,

    后面用Springboot的时候想着自己写一个小东西,方便调试,

    代码如下:

    package com.as.common.interceptor;
    import java.io.BufferedReader;
    import java.io.File;
    import java.io.FileInputStream;
    import java.io.InputStreamReader;
    import java.util.Map;
    import java.util.Map.Entry;
    import java.util.Set;
    
    import javax.servlet.http.HttpServletRequest;
    
    import org.aspectj.lang.JoinPoint;
    import org.aspectj.lang.annotation.AfterReturning;
    import org.aspectj.lang.annotation.Aspect;
    import org.aspectj.lang.annotation.Before;
    import org.aspectj.lang.annotation.Pointcut;
    import org.slf4j.Logger;
    import org.slf4j.LoggerFactory;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.beans.factory.annotation.Value;
    import org.springframework.stereotype.Component;
    import org.springframework.web.context.request.RequestContextHolder;
    import org.springframework.web.context.request.ServletRequestAttributes;
    
    import com.fasterxml.jackson.databind.ObjectMapper;
    /**
     * 
     * @Description 打印请求信息
     * @author 张银彪 
     * @category
     * @date 2019年12月12日 下午5:50:26 
     * @version V0.1
     */
    @Aspect
    @Component
    public class InfoPrint {
        private final static Logger logger = LoggerFactory.getLogger(InfoPrint.class);
     
      private final ObjectMapper mapper;
      @Value("${xc.isDev}")
        boolean isDev=false;
      @Autowired
      public InfoPrint(ObjectMapper mapper) {
        this.mapper = mapper;
      }
     //使用此注解才可以进入打印
      @Pointcut("@within(org.springframework.web.bind.annotation.RestController)")
      public void webLog() {
      }
     
      @Before("webLog()")
      public void doBefore(JoinPoint joinPoint) {
          HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder .getRequestAttributes()).getRequest();
          logger.info("
     
    ");
          String replace = joinPoint.getSignature().getDeclaringTypeName().replace(".", "\");
          File file = new File(System.getProperty("user.dir")+"/src/main/java/"+replace+".java");
          String methodName = joinPoint.getSignature().getName();
          StringBuilder result = new StringBuilder();
          int i=1;
          if (isDev) {
               try{
                      BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream(file), "UTF-8"));//构造一个BufferedReader类来读取文件
                      String s = null;
                      while((s = br.readLine())!=null){//使用readLine方法,一次读一行
                          result.append( System.lineSeparator() + s);
                          if (s.contains(methodName+"(")) {
                            break;
                          }
                          i++;
                      }
                      br.close();
                  }catch(Exception e){
                      logger.info("已经打包,未读取到源码");
                  }
    
          }
          logger.info("------------Action Info Start------------");
          logger.info("目标跳转类:->	 "+joinPoint.getSignature().getDeclaringTypeName()+".("+joinPoint.getSignature().getDeclaringType().getSimpleName()+".java:"+i+")");
          Map<String, String[]> parameterMap = request.getParameterMap();
          Set<Entry<String, String[]>> entrySet = parameterMap.entrySet();
          for (Entry<String, String[]> entry : entrySet) {
              try {
                  logger.info("请求参数:  ->	 "+entry.getKey()+" = "+entry.getValue()[0]);
            } catch (ArrayIndexOutOfBoundsException e) {
            }
        }
      }
     
      @AfterReturning(returning = "response", pointcut = "webLog()")
      public void doAfterReturning(Object response) throws Throwable {
        if (response != null) {
            try {
                logger.info("响应数据:  ->	 " + mapper.writeValueAsString(response));
            } catch (Exception e) {
                // TODO: handle exception
            }
        }
        logger.info("------------Action Info End------------");
        logger.info("
     
    ");
      }
    }
  • 相关阅读:
    家庭记账本开发进度6
    家庭记账本开发进度5
    家庭记账本开发进度4
    家庭记账本开发笔记3
    大道至简阅读笔记01
    个人作业 数组(续)
    二维数组
    个人作业1-数组
    软件工程第一周开课微博
    第一周学习进度条报告
  • 原文地址:https://www.cnblogs.com/xyzxy/p/12592110.html
Copyright © 2020-2023  润新知