首页 > 其他分享 >SpringBoot系列---【JDK版本导致AOP获取参数名为空】

SpringBoot系列---【JDK版本导致AOP获取参数名为空】

时间:2024-04-07 17:36:19浏览次数:23  
标签:maven SpringBoot JDK 入参 --- 获取 参数 AOP 测试环境

1.问题描述

我使用AOP记录请求入参和响应,异步写入es,在获取请求入参的参数名时候,发现在本地没问题,发到云上测试环境就取不到了。

private Map<String,Object> buildRequestParam(ProceedingJoinPoint joinPoint){
  MehtodSignature signature = (MethodSignature)joinPoint.getSignature();
  String[] parameterNames = signature.getParameterNames();
  ...
}

2.问题分析

本地和测试环境唯一不同的就是jdk的版本,测试环境使用的dockerfile中的openjdk:8u252,本地开发时用的是jdk1.8.0_45,经过一番查询,发现是在Java8之前,代码编译为class文件后,方法参数的类型固定,但是方法名称会丢失,方法名称会变成arg0、arg1....。而现在,在Java8开始可以在class文件中保留参数名,这就给反射带来了极大的遍历。像mybatis等需要使用反射机制获取方法参数的时候就可以不用像以前一样需要使用类似于@Param之类的注解。

3.解决方案

推荐修改maven
在pom.xml中,添加

<plugin>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-maven-plugin</artifactId>
    <executions>
     <execution>
       <goals>
         <goal>repackage</goal>
       </goals>
     </execution>
    </executions>
</plugin>
<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-compiler-plugin</artifactId>
    <version>3.6.1</version>
    <configuration>
        <source>1.8</source>
        <target>1.8</target>
        <compilerArgs>
            <arg>-parameters</arg>
        </compilerArgs>
    </configuration>
</plugin>

标签:maven,SpringBoot,JDK,入参,---,获取,参数,AOP,测试环境
From: https://www.cnblogs.com/hujunwei/p/18119512

相关文章

  • 学习 Git 基础知识 - 日常开发任务手册
    欢迎来到我关于Git的综合指南,Git是一种分布式版本控制系统,已经在软件开发中彻底改变了协作和代码管理方式。无论你是经验丰富的开发者还是刚开始编程之旅的新手,理解Git对于正确掌控代码、高效管理项目和与他人合作至关重要。在本教程中,我将带领你了解Git的基础知识......
  • SpringBoot集成mqtt启动就不断报已断开连接问题
    踩坑记录,实在是天坑!!!原因一:clientId相同,即clientId重复导致(不过我不是这个问题)我的问题是:项目启动成功后,控制台不停地反复输出:已断开连接,,,加了重连机制后,则不停地输出:重连失败,已连接客户机,,,尼玛,,关键点还在于我能接收到订阅的消息(不影响消息处理),这又是什么情况,明明没断连,确一直......
  • Android 音视频开发 - VideoView
    Android音视频开发-VideoView本篇文章主要介绍下Android中的VideoView.1:VideoView简介VideoView是一个用于播放视频的视图组件,可以方便地在应用程序中播放本地或网络上的视频文件。VideoView可以直接在布局文件中使用,也可以在代码中动态创建。它封装了MediaPlayer和Sur......
  • 软考-系统集成项目管理中级-项目管理一般知识
    本章历年考题分值统计本章重点常考知识点汇总清单(学握部分可直接理解记忆)项目型组织的优点体现在如下方面:本章历年考题及答案解析2019年上半年第29题(此题为常规重点考题,建议举一反三)在(29)组织结构中,项目拥有独立的项目团队,项目经理在调用与项目相关的资源时,......
  • 02-Maven安装
     1. Maven软件的下载使用Maven管理工具,我们首先要到官网去下载它的安装软件。http://maven.apache.org/download.cgi这里注意:maven3.6.3的版本相对比较稳定,建议使用(下面是maven3.6.3版本)官网链接:Indexof/dist/maven/maven-3/3.6.3/binaries(apache.org)百度网盘......
  • CentOS 安装OpenJDK 11
    安装OpenJDK11sudoyuminstalljava-11-openjdk-devel   2.确认Java版本java-version   3.配置JAVA_HOME环境变量update-alternatives--configjava在输出的结果中,你会看到Java的安装路径,然后配置环境变量,如下:sudovi/etc/profile在文件的末尾,添加以......
  • JMeter-分布式压测部署与执行
    一、 主机\从机安装相同版本JDK1、openjdk压缩包解压到C盘,配置环境变量2、 cmd,执行检查是否安装成果:java -version 二、 主机\从机安装相同版本JMeter1、jmeter压缩包解压到C盘,配置环境变量2、  jmeter.bat,发送快捷方式到桌面3、 双击,是否打开成功4、 ......
  • JMeter-压测问题分析
    【报错信息】Non HTTP response code: org.apache.http.conn.ConnectTimeoutException/Non HTTP response message: Connect to IP:端口 failed: Read timed outNon HTTP response code: java.net.SocketTimeoutException/Non HTTP response message: ......
  • Flask - How do I read the raw body in a POST request when the content type is "a
    TurnsoutthatFlasksets request.data toanemptystringifthecontenttypeoftherequestis application/x-www-form-urlencoded.SinceI'musingaJSONbodyrequest,IjustwanttoparsethejsonorforceFlasktoparseitandreturn request.json.......
  • Elasticsearch-定制分词器
    一、内置分词器分词步骤1).characterfilter:在一段文本进行分词之前,先进行预处理,eg:最常见的过滤html标签(hello->hello),&->and(I&you->Iandyou)2).tokenizer:分词,eg:helloyouandme->hello,you,and,me3).tokenfilter:一个个小单词标准化转换lower......