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"}]
-------------------------------

 

posted @ 2020-08-22 20:47  南鸽  阅读(260)  评论(0编辑  收藏  举报