首页 > 其他分享 >springboot 通过aop切面的方式打印controller 出入参数

springboot 通过aop切面的方式打印controller 出入参数

时间:2023-06-24 13:11:15浏览次数:40  
标签:info joinPoint springboot aop springframework controller org import log

pom文件引入

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


定义切面类 AspectConfig

import com.alibaba.fastjson.JSONObject;
import lombok.extern.slf4j.Slf4j;
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.core.annotation.Order;
import org.springframework.stereotype.Component;
import org.springframework.web.context.request.RequestContextHolder;
import org.springframework.web.context.request.ServletRequestAttributes;
import org.springframework.web.multipart.MultipartFile;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.util.Arrays;
import java.util.List;
import java.util.Optional;
import java.util.stream.Collectors;

@Component
@Aspect
@Order(1)
@Slf4j
public class AspectConfig {

@Pointcut("execution(* com.zan.rwj.controller..*.*(..))")
private void webLog() {
}

@Around("@within(org.springframework.web.bind.annotation.RestController)" +
"||@within(org.springframework.stereotype.Controller)")
public Object after(ProceedingJoinPoint joinPoint) throws Throwable{
ServletRequestAttributes requestAttributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
HttpServletRequest request = requestAttributes.getRequest();
log.info("请求日志的打印");
log.info("请求地址:{}", Optional.ofNullable(request.getRequestURI().toString()).orElse(null));
log.info("请求方式:{}",request.getMethod());
log.info("请求类方法:{}",joinPoint.getSignature());
log.info("请求类方法参数:{}", JSONObject.toJSONString(filterArgs(joinPoint.getArgs())));
long start = System.currentTimeMillis();
Object result = joinPoint.proceed(joinPoint.getArgs());
log.info("请求响应参数{}",JSONObject.toJSONString(result));
long end = System.currentTimeMillis();
log.info("执行耗时:{}", end - start);
return result;
}

private List<Object> filterArgs(Object[] objects) {
return Arrays.stream(objects).filter(obj -> !(obj instanceof MultipartFile)
&& !(obj instanceof HttpServletResponse)
&& !(obj instanceof HttpServletRequest)).collect(Collectors.toList());
}

}


测试输出格式:

 

 很完美,适合项目生产



标签:info,joinPoint,springboot,aop,springframework,controller,org,import,log
From: https://www.cnblogs.com/rwjnb/p/17500952.html

相关文章

  • 基于SpringBoot+MySQL+IDEA开发的家庭财务管理系统
    基于SpringBoot+MySQL+IDEA开发的家庭财务管理系统项目介绍......
  • SpringBoot中的yml文件中读取自定义配置信息
    SpringBoot中的yml文件中读取自定义配置信息开发中遇到的问题,百度的答案我都没有找到,去找大佬获取到的经验总结,这只是其中的一种方法,如果其他大佬有新的方法,可以分享分享。一、非静态属性1.1yml文件自定义配置信息,通过我们编写的代码读取。image:path:E:\image#存......
  • k8s驱逐篇(6)-kube-controller-manager驱逐-NodeLifecycleController源码分析
    概述k8sv1.16版本中NodeController已经分为了NodeIpamController与NodeLifecycleController,本文主要介绍NodeLifecycleController。NodeLifecycleController主要功能有:(1)定期检查node的心跳上报,某个node间隔一定时间都没有心跳上报时,更新node的readycondition值为false或unkno......
  • Springboot web 项目开发流程梳理总结
    项目开发流程梳理总结1.环境准备1.准备数据库表(user,order);2.创建springboot工程,引入对应的起步依赖(web,mybatis,mybatisx,mysql驱动,lombok);3.配置文件application.properties中引入mybatis的配置信息,准备对应的实体类;4.准备对应的mapper,service(接口,实现类),controlle......
  • SpringBoot面试题
    SpringBoot中常见的面试题:1.SpringBoot中常用的注解有哪些:对于理解SpringBoot的自动配置(自动装配)原理作出铺垫。1.@SpringBootApplication:这个注解标识了SpringBoot的工程,这个注解标识了一个SpringBoot工程,它实际上是另外三个注解合成的。2.@SpringBootConfiguration:这个......
  • springboot整合mysql和clickhouse多数据源
    1、添加依赖<!--MyBatis-PlusStarter--><dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-boot-starter</artifactId><version>3.2.0</version></dependency>......
  • 基于SpringBoot实现SSMP整合的案例源码
    案例介绍:基于SpringBoot实现SSMP整合的案例之一(案例分析与模块创建)-掘金(juejin.cn)源码下载:点我......
  • springboot & mongodb test
    <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-mongodb</artifactId></dependency>下载方式https://www.mongodb.com/docs/manual/tutorial/install-mongodb-on-os-x/docker方式do......
  • Springboot更改banner
    首先创建一个banner.txt。 将图像放到txt然后你启动就会发现: ......
  • SpringBoot内容协商机制
    1、是什么?SpringBoot内容协商机制是一种实现了内容协商(ContentNegotiation)的Web服务器,它可以根据客户端请求的不同,将响应返回给客户端。在传统的Web服务器中,如果客户端请求的URL与服务器上的URL不一致,服务器就会返回一个错误响应,告诉客户端所请求的URL不存在或者不合法。而Spri......