通过java反射机制,Method获取出来的参数名为arg

前言

最近我一直在尝试手写一个简单的框架,其中,在补全mvc框架的时候,遇到了Method方法关于版本以及一些奇奇怪怪的坑。
具体介绍
框架需要实现的部分如下
将到有@requestMapping的注解的方法通过反射机制获取出来
将获取到的Method放入一个Map<String,Object>中,其中key为requestMapping对应的url链接,value为Method
在前端进行链接的请求的时候,将请求解析,分别获取到url以及对应的参数。
通过url从map中获取出对应的方法,调用method.invokle
出现问题
其中在调用method.invoke方法的时候,我需要将参数按照一定的顺序传进去,不然可能会报错
我先将method需要传入的参数全部取出,以及需要传入的参数如下

  • 将前端获取的参数与method获取的出来的参数通过参数名一一对应,再将值赋予paramValues数组,但是一直没办法对应,因为从method获取出来的参数数组的各个元素通过getName()拿到的参数名都是arg开头的,如arg0,arg1.

    解决

    经过一大堆的折腾后,发现反射机制获取参数名是jdk8之后才实现的,但是自己已经通过pom设置好了jdk版本了,后来再查资料,发现还需要开启必须手动在编译时开启-parameters 参数。以idea和myeclise2015为例(其中idea是网上找到的,以这个为参考,我对应打开我的ME2015的)

  •   
  • idea 你需要在Preferences->Build,Execution,Deployment->Compiler->java Compiler 页面添加该编译选项

    myeclise2015

    window 》 prefenrences 》 java 》Compiler 》 点击 strore infomation about method parameters(usable via reflection)

  • 这个时候回导入一些东西,之后就可以直接获取参数名了
  • 转自:https://blog.csdn.net/BeamCSDN/article/details/84497260

发表回复