spring boot 通过 aop 实现全局打印请求参数和返回结果

本贴最后更新于 2262 天前,其中的信息可能已经时移世异

为了更好的跟踪请求参数和请求连接还有返回的结果,可以使用 spring 的面向切面 aop 实现请求的日志输出。

第一步:添加 spring boot aop 依赖

<!-- 面向切面spring aop --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-aop</artifactId> </dependency>

第二步:添加日志切面类

/** * @Description 打印请求参数和返回结果 * @Date 2019/2/26 11:37 * @Created by gongxz */ @Aspect @Configuration public class LoggerAspect { private Logger logger = LoggerFactory.getLogger(this.getClass()); // 定义切点Pointcut @Pointcut("execution(* com.springboot.controller..*.*(..))") public void executeService() { } @Around("executeService()") public Object doAround(ProceedingJoinPoint pjp) throws Throwable { RequestAttributes ra = RequestContextHolder.getRequestAttributes(); ServletRequestAttributes sra = (ServletRequestAttributes) ra; HttpServletRequest request = sra.getRequest(); String url = request.getRequestURL().toString(); String method = request.getMethod(); //String uri = request.getRequestURI(); String queryString = request.getQueryString(); Object[] args = pjp.getArgs(); String params = ""; //获取请求参数集合并进行遍历拼接 if(args.length>0){ if("POST".equals(method)){ Object object = args[0]; Map map = getKeyAndValue(object); params = JSON.toJSONString(map); }else if("GET".equals(method)){ params = URLDecoder.decode(queryString,"UTF-8"); } } logger.info("请求开始===地址:"+url); logger.info("请求开始===类型:"+method); logger.info("请求开始===参数:"+params); // result的值就是被拦截方法的返回值 Object result = pjp.proceed(); logger.info("请求结束===返回值:" + JSON.toJSON(result)); return result; } public static Map<String, Object> getKeyAndValue(Object obj) { Map<String, Object> map = new HashMap<>(); // 得到类对象 Class userCla = obj.getClass(); /* 得到类中的所有属性集合 */ Field[] fs = userCla.getDeclaredFields(); for (Field f : fs) { f.setAccessible(true); // 设置些属性是可以访问的 Object val; try { val = f.get(obj); // 得到此属性的值 map.put(f.getName(), val);// 设置键值 } catch (IllegalArgumentException | IllegalAccessException e) { e.printStackTrace(); } } return map; } }

第二步:直接请求,日志效果如下

image.png

  • Spring

    Spring 是一个开源框架,是于 2003 年兴起的一个轻量级的 Java 开发框架,由 Rod Johnson 在其著作《Expert One-On-One J2EE Development and Design》中阐述的部分理念和原型衍生而来。它是为了解决企业应用开发的复杂性而创建的。框架的主要优势之一就是其分层架构,分层架构允许使用者选择使用哪一个组件,同时为 JavaEE 应用程序开发提供集成的框架。

    949 引用 • 1460 回帖

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...