Spring Boot 使用Map来接受前端传过来的参数,指定泛型类型有什么作用

在SpringBoot应用中,无论Map的泛型类型是否指定为<String,Object>,实际处理前端POST请求传递的数据时,效果似乎并无差异。尽管编译器可能会给出警告,但通过调试发现,无论是字符串还是字符数组,都能被正确地存储在Map中。这涉及到Java的泛型擦除概念,即运行时并不检查泛型类型。对于为何能用char[]接收数据的原因,作者表示需要进一步研究。
摘要由CSDN通过智能技术生成
Spring Boot使用Map来接受前端传过来的参数时,我发现无论是否指定Map的泛型类型,对实际使用都没有任何的区别。

方式一,指定泛型类型

@PostMapping("/login")
public R<String> login(@RequestBody Map<String,Object> map,HttpSession session){
    log.info(map.toString());
    return null;
}
方式二,不指定泛型类型

@PostMapping("/login")
public R<String> login(@RequestBody Map map,HttpSession session){
    log.info(map.toString());
    return null;
}
不指定泛型类型,编译器会提示。但是经过一番debug调试,我发现无论是否指定泛型类型,达到的效果都是完全相同的,存储的东西都一模一样。
使用以下代码进行测试

这种情况后面的对象spring会将其封装为一个map

$axios.post("/user/login",{"data":{"data1":"value1"}})

 这种情况spring会将后面的直接封装为char[]

$axios.post("/user/login",{"data":"value"})
我经过断点调试,发现就算是使用了Map<String,Object>的方式接受参数,key的值也不是String,依然是char[]。可能这就是Java的泛型擦除?

但我比较好奇,为什么可以使用char[]来接收这个数据,挖坑以后自己研究,或者遇到大佬了请教一下。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值