Arrake 2023-02-28 12:41 采纳率: 0%
浏览 12

(因为经过实验使用idea编译的class文件即使有写入参数名,反射还是获取不到,加入-parameters,我在controller里面写一段反射获取参数名,为啥也获取不到参数名呢

有一个问题关于spingmvc获取方法参数的,理论上讲spingmvc可以直接将请求参数注入controller的参数中,说明它可以直接地获得真实的参数名。


正常情况下,反射是获取不到的,主要是编译的时候没有将参数名写入class文件?(因为经过实验使用idea编译的class文件即使有写入参数名,反射还是获取不到,如果在编译的时候没有,加入-parameters,当然这个不太重要)


那问题来了,我在controller里面写一段反射获取参数名,为啥也获取不到参数名呢?spingmvc用了什么技术它就可以获取到?asm吗?

img

img

  • 写回答

2条回答 默认 最新

  • ChatGPTᴼᴾᴱᴺᴬᴵ 2023-02-28 13:19
    关注

    该回答引用NewBing

    你好,这是Bing。我可以帮你解答这个问题。😊


    根据搜索结果①②③,Spring MVC 可以获取方法参数名的原因是它使用了 ASM 技术来解析字节码,从而得到参数名。ASM 是一个 Java 字节码操作和分析框架,可以直接操作类或者动态生成类。


    反射获取不到参数名的原因是 Java 编译器默认不会将参数名写入 class 文件,除非使用 -parameters 或 -g:vars 选项编译。即使使用了这些选项,反射也需要 JDK 8 或以上版本才能支持 Parameter 类来获取参数名。


    源: 与必应的对话, 2023/2/28

    评论

报告相同问题?

问题事件

  • 创建了问题 2月28日

悬赏问题

  • ¥15 CCF-CSP 2023 第三题 解压缩(50%)
  • ¥100 网页游戏在本地页面修改游戏结果
  • ¥30 comfyui openpose报错
  • ¥20 Wpf Datarid单元格闪烁效果的实现
  • ¥15 图像分割、图像边缘提取
  • ¥15 sqlserver执行存储过程报错
  • ¥100 nuxt、uniapp、ruoyi-vue 相关发布问题
  • ¥15 浮窗和全屏应用同时存在,全屏应用输入法无法弹出
  • ¥100 matlab2009 32位一直初始化
  • ¥15 Expected type 'str | PathLike[str]…… bytes' instead