首页 > 编程语言 >java aspect 切面怎么获取 POST 数据

java aspect 切面怎么获取 POST 数据

时间:2024-01-25 16:34:19浏览次数:24  
标签:java String request requestBody result aspect return POST

java aspect 切面怎么获取 POST 数据

/**
* 切面 
*/
@Aspect
@Component
public class PostRequestBodyAspect {
            
            @Pointcut("execution(* com.example.controller.*.*(..))")
            public void controllerMethods() {}
            
            @Around("controllerMethods() && args(.., @RequestBody requestBody)")
            public Object aroundControllerMethods(ProceedingJoinPoint joinPoint, Object requestBody) throws Throwable {
                // 在这里获取到 POST 请求体中的参数
                // requestBody 就是 POST 请求体中的参数
                HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest();
                String data=getFormData(request,requestBody);
                Date startDate=new Date();
                 try {
                // 执行原始方法
                Object result = joinPoint.proceed();
                
                // 可以对原始方法的返回值进行拦截和修改
                
                return result;
                } catch (Exception e) {
                    // 处理异常情况
                    throw e;
                } finally {
                    HttpServletResponse response = ((ServletRequestAttributes) RequestContextHolder.currentRequestAttribute())
                            .getResponse();
                    Date endDate=new Date();
                    // 获取并处理Response对象
                    System.out.println("Response Status Code: " + response.getStatus());
                    System.out.println("Response Content Type: " + response.getContentType());
                    System.out.println("Response Body: " + response.getWriter().toString());
                    //写入日志到数据库
                    Int responseStatue=request.getStatus();
                    Long costTime=endDate.getTime()-startDate.getTime();  //耗时
                }
            }


            /**
        * 获取POST GET的data数据
        * @param request
        * @return大
        */
        private static String getFormData(HttpServletRequest request,object requestBody) {
            if("POST".equalsIgnoreCase(request.getMethod())){
                return requestBody==null?"": JSONObject.toJsONString(requestBody);
            }
            String data = request.getParameterMap().entrySet().stream().map(entry -> {
                String result;
                String[] value = entry .getvalue();
                if (value != null && value.length > 1) {
                    result = Anrays.stream(value).map(s -> entry.getkey() + "=" + s).collect(Collectors.joining("&"));
                }else {
                result = entry.getKey() + "=" + value[o];
                }
                return result;
            }).collect(Collectors.joining("&"))
            return data;
        }

}

 

标签:java,String,request,requestBody,result,aspect,return,POST
From: https://www.cnblogs.com/zhian/p/17987461

相关文章

  • html 中javascript 如何被调用
    在HTML中,JavaScript可以通过多种方式进行调用。1.内联脚本(InlineScript):直接将JavaScript代码写入到HTML文件的<script>标签中。示例代码如下所示:<!DOCTYPEhtml><html><head><title>使用内联脚本</title></head><body><!--HTML页面内容--><scripttyp......
  • JAVA学习笔记--使用Inte IDEA
    使用IntellijIDEA编写代码新建项目创建新项目选择创建一个空项目并输入项目名弹出ProjecStructure窗口先关闭新建一个模板(Module)并输入模板名打开前面关闭的ProjecStructure窗口修改以下信息(注意:安装的是JDK8则按照以下信息修改,若安装的是JDK其他版本则......
  • JAVA学习笔记--数据类型及注意事项
    Java的数据类型(笔试考题)Java是强类型语言:要求变量使用要严格符合规定,所有变量都必须先定义后才能使用基本类型(primitivetype)数据类型整数类型byte(1字节):-128~127short(2字节):-32768~32767int(4字节):-2147483648~2147483647(最常用)long(8字节):-9223372036854775808~922......
  • JAVA学习笔记--变量与常量
    变量局部变量注意:必须声明并且必须初始化值publicclassHello{//main方法publicstaticvoidmain(String[]args){//局部变量,只在{}内使用inti=10;System.out.print(i);}//其他方法publicvoidadd(){......
  • 2024年1月Java项目开发指南6:接口测试
    我们使用APIFox这款工具对接口进行测试。(你要是会其他的例如postman进行测试也行)https://apifox.com/新建一个项目,新增一个接口因为这个接口没有参数,所以无需填写参数,保存然后点击运行没有设置环境记得先去设置环境我们配置开发环境保存然后选择开发环境进行使用......
  • 2024年1月Java项目开发指南5:controller、service、mapper
    准备工作你知道什么是JSON吗?JSON是什么?格式是什么?有什么用?有什么优点?有什么缺点?请自己百度探索一下,对JSON做了个了解,如果你不知道什么是JSON的话,知道就免了,直接下一步吧。开始:项目目录结构先确保你已经创建了上图的那些文件夹。这都是我们需要用到。简单的做个介绍co......
  • Java中SimpleDateFormat时YYYY与yyyy以及HH和hh的区别注意踩坑
    场景Java开发手册中为什么要求SimpleDateFormat时用y表示年,而不能用Y:https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/131052335在使用SimpleDateFormat在获取当前日期时因使用了YYYY导致20231231这个日期被格式化为20241231这里推荐在日期处理时统一使用封装工具......
  • java线程数量如何确定
    1.概述使用线程池的好处降低资源消耗:线程是稀缺资源,如果无限制地创建,不仅会消耗系统资源,还会降低系统的稳定性,通过重复利用己创建的线程可以降低线程创建和销毁造成的消耗。提高响应速度:当任务到达时,可以不需要等待线程创建就能立即执行提高线程的可管理性:线程池提......
  • Postman使用总结
    对于黑盒测试工程师来说,使用postman的场景无非就是拿它看看接口返回的数据。比对一下预期返回的参数与实际是否相符。所以我这里的postman使用方法仅限于如何调用接口。 首先,你需要下载postman(毋庸置疑,其实用网页版也可以)官网主页:https://www.postman.com/downloads/安装你......
  • java线程池-2
    1.Executors创建线程池的潜在问题在很多公司的编程规范中,非常明确地禁止使用Executors创建线程池。为什么呢?这里从源码讲起,介绍使用Executors工厂方法创建线程池将会面临的潜在问题。1.1Executors创建固定数量的线程池的潜在问题使用newFixedThreadPool工厂方法固定数......