利用切面技术,统一处理接口调用前后,接口信息的日志打印情况
/**
* Controller控制层处理切面,负责处理服务层调用前后的操作。
*
*/
@Slf4j
@Aspect
@Component
public class HandlerControllerLoggerAspect{
/**
* 切面处理方法
*
* @param joinPoint 流程切面点
* @return 响应结果
*/
@Around("execution(* controller路径.*.*Controller.*(..))")
public Object process(ProceedingJoinPoint joinPoint) throws Throwable {
//类和方法名称
String classAndMethodName =joinPoint.getTarget().getClass().getSimpleName() + "." + joinPoint.getSignature().getName();
log.info("执行:{},入参:{}", classAndMethodName, JSONArray.toJSONString(filterParamList(joinPoint)));
//响应结果
Object res = joinPoint.proceed();
log.info("执行:{},出参:{}", classAndMethodName, JSON.toJSONString(res));
return res;
}
/**
* 过滤参数列表
* @param joinPoint
* @return
*/
private List<Object> filterParamList(ProceedingJoinPoint joinPoint) {
List<Object> paramsList = new ArrayList<>();
Object[] arrays = joinPoint.getArgs();
for (int i = 0; i < arrays.length; i++) {
if (!(arrays[i] instanceof HttpServletRequest)) {
paramsList.add(arrays[i]);
}
}
return paramsList;
}
}