一、背景
在java web项目中,打印请求参数能帮我们定位问题,这里提供众多方案中的一种,建议收藏。
二、实现方案
添加aop依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-aop</artifactId>
</dependency>
重写MethodInterceptor拦截器invoke方法
mport lombok.extern.slf4j.Slf4j;
import org.aopalliance.intercept.MethodInterceptor;
import org.aopalliance.intercept.MethodInvocation;
import javax.annotation.Nonnull;
import java.lang.reflect.Method;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
@Slf4j
public class MyInterceptor implements MethodInterceptor {
@Override
public Object invoke(@Nonnull MethodInvocation invocation) throws Throwable {
Method[] methods = Object.class.getMethods();
for (Method m : methods) {
if (invocation.getMethod().equals(m)) {
return null;
}
}
List<Object> parameters = getArguments(invocation);
HttpServletRequest httpServletRequest = ((ServletRequestAttributes) Objects.requireNonNull(RequestContextHolder.getRequestAttributes())).getRequest();
log.info("请求地址:{} ", httpServletRequest.getRequestURL());
log.info("请求方式:{} ", httpServletRequest.getMethod());
log.info("请求参数:{}", parameters);
Objects obj = invocation.proceed();
log.info("请求结果:{}", JSONObject.toJSONString(obj));
return obj;
}
protected List<Object> getArguments(MethodInvocation invocation) {
Object[] arguments = invocation.getArguments();
if (arguments.length == 0) {
return Collections.emptyList();
}
return Arrays.asList(arguments);
}
}
配置拦截切面
import org.springframework.aop.aspectj.AspectJExpressionPointcut;
import org.springframework.aop.support.DefaultPointcutAdvisor;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
public class InterceptorConfig {
//注意该地址为项目具体包地址
public static final String traceExecution = "execution(* com.zzx.demo.controller..*.*(..))";
@Bean
public DefaultPointcutAdvisor defaultPointcutAdvisor2() {
MyInterceptor interceptor = new MyInterceptor();
AspectJExpressionPointcut pointcut = new AspectJExpressionPointcut();
pointcut.setExpression(traceExecution);
// 配置增强类advisor
DefaultPointcutAdvisor advisor = new DefaultPointcutAdvisor();
advisor.setPointcut(pointcut);
advisor.setAdvice(interceptor);
return advisor;
}
}