AOP打印接口入参
maven:
<!-- https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-aop --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-aop</artifactId> <version>2.3.3.RELEASE</version> </dependency> <!-- https://mvnrepository.com/artifact/com.alibaba/fastjson --> <dependency> <groupId>com.alibaba</groupId> <artifactId>fastjson</artifactId> <version>1.2.73</version> </dependency>
aspect
package com.xiang.si; import com.alibaba.fastjson.JSONObject; import com.xiang.si.bean.Request; import org.aspectj.lang.JoinPoint; import org.aspectj.lang.annotation.Aspect; import org.aspectj.lang.annotation.Before; import org.aspectj.lang.annotation.Pointcut; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.stereotype.Component; import org.springframework.util.StringUtils; import org.springframework.web.context.request.RequestContextHolder; import org.springframework.web.context.request.ServletRequestAttributes; import javax.servlet.http.HttpServletRequest; @Aspect @Component public class ControllerRequestAspect { private static final Logger logger = LoggerFactory.getLogger(ControllerRequestAspect.class); /** * 定义一个切点 * 切入 controller包 * com.xiang.si.controller下的所有类的所有方法 */ @Pointcut("execution(* com.xiang.si.controller.*.*(..))") public void aspectMethod(){ } @Before("aspectMethod()") public void requestAspect(JoinPoint joinPoint) { try { ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes(); HttpServletRequest httpServletRequest = attributes.getRequest(); String url = httpServletRequest.getRequestURL().toString(); String method = httpServletRequest.getMethod(); String queryParams = httpServletRequest.getQueryString(); Object[] args = joinPoint.getArgs(); String params = ""; if (StringUtils.isEmpty(queryParams)) { params = args.length == 1 ? JSONObject.toJSONString(args[0]) : JSONObject.toJSONString(args); } else { url = url + "?" + queryParams; params = queryParams.replaceAll("&", ","); } Request request = new Request(url, method, params); logger.info(request.toString()); }catch (Throwable e){ logger.info("error: {}", e.getMessage()); } } }
request实体类
package com.xiang.si.bean; public class Request { private String url; private String method; private String param; public Request() { } public Request (String url, String method, String param) { this.url = url; this.method = method; this.param = param; } public String getUrl() { return url; } public void setUrl(String url) { this.url = url; } public String getMethod() { return method; } public void setMethod(String method) { this.method = method; } public String getParam() { return param; } public void setParam(String param) { this.param = param; } @Override public String toString() { return "Request Start" + '\n' + "-------------------------------" + '\n' + "Request URL: " + url + '\n' + "Request Method: " + method + '\n' + "Parameters: " + param + '\n' + "-------------------------------"; } }
打印效果:
2020-08-22 20:46:23.708 INFO 29858 --- [nio-8090-exec-5] com.xiang.si.ControllerRequestAspect : Request Start ------------------------------- Request URL: http://localhost:8090/user/add Request Method: POST Parameters: [{"age":18,"name":"xiangsi"},{"age":22,"name":"xiangsi"}] -------------------------------