You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java接口泛型参数打印输出Object@哈希值问题排查

问题产生原因

两个核心机制共同导致了这个现象:

  • 第一是Java泛型的类型擦除特性:你写的方法参数public <T> void create(T data)里的泛型T仅在编译阶段做类型校验,编译完成后泛型信息会被完全擦除,运行时Spring MVC解析这个方法参数时,能识别到的参数实际类型只有最顶层的java.lang.Object,没有任何具体类型信息,根本没法做针对性的类型转换和参数绑定。
  • 第二是Spring MVC的默认参数解析规则:你没有给data参数加任何参数绑定注解(比如@RequestParam、@RequestBody、@ModelAttribute),当参数类型是无具体信息的Object时,Spring找不到对应的参数解析器来把form-data里传入的键值对映射到这个参数上,只会直接实例化一个空的原生Object对象赋值给参数。这就是为什么你不管传字符串还是数值,打印出来都是java.lang.Object@xxxx格式的对象内存地址,完全拿不到实际传入的参数值。
修复方案

不要用无边界的泛型作为接口方法的接收参数,根据你传参的格式选择对应的写法:

  • 如果是传form-data格式的键值对:直接用@RequestParam Map<String, Object>接收所有传入参数,或者定义和传参字段匹配的自定义实体类作为参数类型,Spring会自动完成字段映射。
    示例代码:
    @PostMapping
    public void create(@RequestParam Map<String, Object> data) {
        System.out.println(data);
    }
    
  • 如果是传JSON格式的请求体:给参数加上@RequestBody注解,同样用具体的Map或者自定义实体类接收,不要用裸泛型。

内容的提问来源于stack exchange,提问作者HibaHasan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.29 01:39:20