在Spring Boot项目中,你可以使用Spring的AOP(面向切面编程)功能来打印接口请求参数的日志。以下是一个简单的例子,演示如何创建一个切面来记录方法调用和参数。
首先,添加Spring AOP依赖到你的pom.xml
中(如果你使用的是Gradle,相应地添加到build.gradle
中):
<!-- 添加Spring AOP依赖 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-aop</artifactId>
</dependency>
然后,创建一个切面类来拦截特定的注解或者包下的所有接口,并打印日志:
import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.annotation.AfterReturning;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Pointcut;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Component;
@Aspect
@Component
public class LoggingAspect {
private static final Logger logger = LoggerFactory.getLogger(LoggingAspect.class);
// 定义切点表达式,这里以controller包下所有的方法为例
@Pointcut("execution(* com.yourpackage.controller..*.*(..))")
public void controllerLoggingPointcut() {
}
// 在切点之后执行,即接口方法执行完毕后执行
@AfterReturning("controllerLoggingPointcut()")
public void logAfter(JoinPoint joinPoint) {
logger.info("METHOD: " + joinPoint.getSignature().toShortString());
logger.info("ARGS: " + Arrays.toString(joinPoint.getArgs()));
}
}
在上面的例子中,@Pointcut
定义了切点,即哪些方法会被日志切面拦截。@AfterReturning
注解表示在方法执行后记录日志。JoinPoint
对象提供了被拦截方法的相关信息,如方法签名和参数。
确保你的controller包路径与切面中定义的路径相匹配。这样,任何在这个包下的controller接口被调用时,都会触发切面,并打印出方法和参数信息。