首页 > 编程语言 >java vop 打印controller的入参和出参

java vop 打印controller的入参和出参

时间:2022-12-30 17:23:23浏览次数:44  
标签:java request springframework util controller vop import org


package com.sleep.demo.intercepter; import com.alibaba.fastjson.JSONObject; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.ArrayUtils; 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.springframework.stereotype.Component; import org.springframework.web.context.request.RequestContextHolder; import org.springframework.web.context.request.ServletRequestAttributes; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.util.Arrays; import java.util.List; import java.util.stream.Collectors; import java.util.stream.Stream; @Slf4j @Aspect @Component public class ControllerLogAspect { @Pointcut("execution(* com.sleep.demo.controller..*.*(..))") public void pointCut() { } @Around(value = "pointCut()") public Object doAuthMethodInterrupt(ProceedingJoinPoint point) { ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes(); HttpServletRequest request = attributes.getRequest(); String methodName = point.getSignature().getName(); // 入参 Object[] paramArr = point.getArgs(); //序列化时过滤掉request和response List<Object> logArgs = streamOf(paramArr) .filter(arg -> (!(arg instanceof HttpServletRequest) && !(arg instanceof HttpServletResponse ))) .collect(Collectors.toList()); // 入参打印 log.info(">>>>>>>>>>>> Method:{} , path={} ,Param:{}" , methodName, request.getRequestURI(), JSONObject.toJSONString(logArgs)); try { long currentTimeStampBegin = System.currentTimeMillis(); Object obj = point.proceed(); long diff = System.currentTimeMillis() - currentTimeStampBegin; // 出参打印 log.info("<<<<<<<<<<<< method:{} , Response:{} ,time:{}ms", methodName, JSONObject.toJSONString(obj), diff); return obj; } catch (Throwable e) { log.error("<<<<<<<<<<<< method:{},REQUEST_ERROR_MSG:{}", methodName, e.getMessage()); // throw new RuntimeException(e); e.printStackTrace(); return 500; } } public static <T> Stream<T> streamOf(T[] array) { return ArrayUtils.isEmpty(array) ? Stream.empty() : Arrays.stream(array); } }

需要有spring aop的支持

<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-aop</artifactId>
		</dependency>

 

标签:java,request,springframework,util,controller,vop,import,org
From: https://www.cnblogs.com/niun/p/17015387.html

相关文章

  • java自定义注解
    自定义注解importjava.lang.annotation.ElementType;importjava.lang.annotation.Retention;importjava.lang.annotation.RetentionPolicy;importjava.lang.annot......
  • 【校招VIP】“推推”Java项目课程:接口设计——详情数据和快速验证
    今天继续看一下商业实战项目【推推】小说详情模块的第三期。上节课做了文档设计,这节课做一下接口设计。在前后端分离的项目里,接口设计非常重要。在正常的实习或者开发工作......
  • Java集合快速失败和安全失败机制
    快速失败机制是Java集合的一种错误检测机制,当遍历集合时,集合的结构进行了修改,可能会触发"fail-fast"机制Java.util包中所有集合都被设计为快速失败机制示例代码public......
  • 全文检索工具elasticsearch:第三章: Java程序中的应用
    搭建模块创建二个项目gmall-list-service的appliction.properties:server.port=8073spring.datasource.url=jdbc:mysql://localhost:3306/gmall?characterEncoding=......
  • 使用Java NIO提高服务端程序的性能
      JavaNIO增加了新的SocketChannel、ServerSocketChannel等类来提供对构建高性能的服务端程序的支持。SocketChannel、ServerSocketChannel能够在非阻塞的模式下工作,它......
  • JavaScript 批量大文件上传下载
    ​ 4GB以上超大文件上传和断点续传服务器的实现随着视频网站和大数据应用的普及,特别是高清视频和4K视频应用的到来,超大文件上传已经成为了日常的基础应用需求。但是在......
  • java 多线程并行执行任务 demo
    packagecom.sleep.demo;importorg.apache.commons.lang3.StringUtils;importjava.util.*;importjava.util.concurrent.*;importjava.util.concurrent.atomic.A......
  • 关于RxJava2.0你不知道的事
    前言如果你对RxJava1.x还不是了解,可以参考下面文章。​​1.RxJava使用介绍​​【视频教程】2.RxJava操作符  ​​•CreatingObservables(Observable的创建操作符)......
  • RxJava 合并组合两个(或多个)Observable数据源
    关键词:合并ObservableRxJava系列教程:​​1.RxJava使用介绍​​​​【视频教程】​​​​2.RxJava操作符  ​​•CreatingObservables(Observable的创建操作符)​......
  • java 读取json文件到对象
    1、新建json文件[{"id":1,"name":"酒水专区","imageUrl":"7cf/e61b0aec87f07393.png","previewImageUrl":"/9f8d4360d3a125b5.png"},{......