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[]来接收这个数据,挖坑以后自己研究,或者遇到大佬了请教一下。