SpringBoot 打印启动URL 及 请求入参出参

1. 1 java 切面类


import com.alibaba.fastjson.JSON;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Pointcut;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.context.request.RequestAttributes;
import org.springframework.web.context.request.RequestContextHolder;
import org.springframework.web.context.request.ServletRequestAttributes;

import javax.servlet.http.HttpServletRequest;
import java.lang.reflect.Field;
import java.net.URLDecoder;
import java.util.HashMap;
import java.util.Map;

/**
 *  打印请求参数和返回结果
 */
@Aspect
@Configuration
public class LoggerAspect {

    private Logger logger = LoggerFactory.getLogger(this.getClass());
    // 定义切点Pointcut
    @Pointcut("execution(* com.sendmsg.sendmsg.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("==============================start==============================================");
        logger.info("请求开始===uri:" + uri);
        logger.info("请求开始===地址:" + url);
        logger.info("请求开始===类型:" + method);
        logger.info("请求开始===参数:" + params);
        logger.info("===============================end===============================================");

        // 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;
    }

}
=====================上面表单提交时 有异常使用下面的===================


import cn.hutool.core.util.StrUtil;
import com.alibaba.fastjson.JSON;
import lombok.extern.slf4j.Slf4j;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Pointcut;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.context.request.RequestAttributes;
import org.springframework.web.context.request.RequestContextHolder;
import org.springframework.web.context.request.ServletRequestAttributes;

import javax.servlet.http.HttpServletRequest;
import java.net.URLDecoder;
import java.util.Arrays;

/**
 * 打印请求参数和返回结果
 */
@Aspect
@Configuration
@Slf4j
public class LoggerAspect {

    //    private Logger logger = LoggerFactory.getLogger(this.getClass());
    // 定义切点Pointcut
    @Pointcut(" execution(* com.shsnc.chatservice.admin.logincontroller.*..*(..)) " +
            "|| execution(* com.shsnc.chatservice.admin.alarm.alarmcontroller.*..*(..))" +  // 3
            "|| execution(* com.shsnc.chatservice.admin.logincontroller.*..*(..)) " +
            "|| execution(* com.shsnc.chatservice.admin.mobile.wechat.mobilewecharcontroller.*..*(..)) " +
            "|| execution(* com.shsnc.chatservice.admin.wechat.wechartcontroller.*..*(..)) " +
            "|| execution(* com.shsnc.chatservice.smicro.smicrocontroller.*..*(..)) " +
//            "|| execution(* com.shsnc.chatservice.admin.pc.admin.*..*(..)) " +
//            "|| execution(* com.shsnc.chatservice.admin.pc.admin.*..*(..)) " +
            "")
    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();
        String targetMethodParams = Arrays.toString(pjp.getArgs());
        String params = "";
        //获取请求参数集合并进行遍历拼接
        if (StrUtil.isNotBlank(targetMethodParams)) {
            if ("POST".equals(method)) {
                params = JSON.toJSONString(targetMethodParams);
            } else if ("GET".equals(method)) {
                params = URLDecoder.decode(queryString, "UTF-8");
            }
        }
        log.info("==============================start================================================");
        log.info("请求开始===uri:" + uri);
        log.info("请求开始===地址:" + url);
        log.info("请求开始===类型:" + method);
        log.info("请求开始===参数:" + params);
        log.info("===============================end=================================================");

        // result的值就是被拦截方法的返回值
        Object result = pjp.proceed();
        log.info("===============================start===============================================");
        log.info("请求结束===返回值:" + JSON.toJSON(result));
        log.info("===============================end=================================================");

        return result;
    }



1.2 maven 切面依赖

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-aop</artifactId>
        </dependency>

2.1 启动打印项目 url 及 swagger url


import lombok.extern.slf4j.Slf4j;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.ConfigurableApplicationContext;
import org.springframework.core.env.Environment;

import java.net.InetAddress;
import java.net.UnknownHostException;

@SpringBootApplication
@Slf4j
public class SendmsgApplication {

    public static void main(String[] args) throws UnknownHostException{
        ConfigurableApplicationContext application = SpringApplication.run(SendmsgApplication.class, args);
        Environment env = application.getEnvironment();
        String ip = InetAddress.getLocalHost().getHostAddress();
        String port = env.getProperty("server.port");
        String path = env.getProperty("server.servlet.context-path");

        log.info("\n---------------------------------------------------------------------------------------------------\n\t" +
                "Application chat-service is running! Access URLs:\n\t" +
                "Local: \t\thttp://localhost:" + port + path + "\n\t" +
                "External: \thttp://" + ip + ":" + port + path + "\n\t" +
//                "Swagger文档: \thttp://" + ip + ":" + port + path + "doc.html\n" +
       "----------------------------------------------------------------------------------------------------");
    }


}

项目实例

百度网盘链接 : 提取码 7k7k

https://pan.baidu.com/s/1vinWaDt70cqohXyJKv100g?pwd=7k7k
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值