这个问题实在是不知道怎么取标题异常如下:Exceptioninthread"main"java.lang.ClassCastException:com.google.gson.internal.LinkedTreeMapcannotbecasttoXXX我举例说明:已知有一个User类,包含了一些简单的属性publicclassUser{privateStringuserName;privateStringgender;//getset方法省略}然后我有一个专门用于数据传输的json包装类publicclassJsonMessage{privateIntegercode;privateStringmsg;privateTdata;//getset方法省略}然后我有一个主方法publicstaticvoidmain(String[]args){//有一个待序列化的json字符串StringjsonStr="{'code':123,'msg':'test','data':{'userName':'baofeidyz','gender':'male'}}";//然后使用Gson序列化Gsongson=newGson();JsonMessagemessage=gson.fromJson(jsonStr,JsonMessage.class);//然后在这里我尝试获取data中的数据,就报//Exceptioninthread"main"java.lang.ClassCastException:com.google.gson.internal.LinkedTreeMapcannotbecasttoUser}可是当我不使用泛型的时候就是OK的:我这里有一个新的json包装类publicclassJsonMessage2{privateIntegercode;privateStringmsg;privateUserdata;//getset方法省略}然后我又新建了一个新的main方法:publicstaticvoidmain(String[]args){//还是那个待序列化的json字符串StringjsonStr="{'code':123,'msg':'test','data':{'userName':'baofeidyz','gender':'male'}}";//然后使用Gson序列化Gsongson=newGson();//这里换成了新的包装类JsonMessage2message=gson.fromJson(jsonStr,JsonMessage2.class);//然后就成功获取到了数据}代码是我在segmentfault网页现敲的,但是问题是和我实际问题一样。个人觉得主要是我对泛型和Gson的序列化方式理解有问题,所以想请教一下各位,感谢!
2 回答
翻过高山走不出你
TA贡献1875条经验 获得超3个赞
自问自答了。我解决了。在Gson反序列化的过程中,如果你需要传泛型需要这样操作:JsonMessagemessage=gson.fromJson(jsonStr,newTypeToken >(){}.getType()); 其实我以前就遇到过这个问题,只是这次发生的场景变了,这个问题实际上是在写SpringBoot的Controller的时候遇到的最后的解决方案是修改传入参数的key,需要和包装类的属性名相同才可以,不过建议彻底去除jackson改成集成gson会比较好然后就可以非常简单的使用@RequestBody来拿到数据对象
添加回答
举报
0/150
提交
取消