鸿蒙原生应用开发者激励计划发布!最高获百万现金!点击立即参与
package test;
import java.util.HashMap;
import java.util.Map;
import com.google.gson.Gson;
import com.google.gson.reflect.TypeToken;
public class GsonWhithOBJ {
public static void main(String[] args) {
Map<String, Object> map = new HashMap<>();
map.put("code", 1);
map.put("msg", "aaaaaaaaaaaaa");
U u = new U("name", "123", 12);
map.put("u", u);
String json = new Gson().toJson(map);
System.out.println("1 "+json);
Map<String, Object> fromJsonMap = new Gson().fromJson(json, new TypeToken<Map<String, Object>>() {
}.getType());
System.out.println("2 "+fromJsonMap);
Object of=fromJsonMap.get("u");
System.out.println("3 "+of);
U uf=(U)of;
System.out.println("4 "+uf);
}
}
class U {
private String name;
private String pwd;
private Integer age;
public U() {
super();
}
public U(String name, String pwd, Integer age) {
super();
this.name = name;
this.pwd = pwd;
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPwd() {
return pwd;
}
public void setPwd(String pwd) {
this.pwd = pwd;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
}
打印结果;
错误文本:
1 {"u":{"name":"name","pwd":"123","age":12},"code":1,"msg":"aaaaaaaaaaaaa"}
2 {u={name=name, pwd=123, age=12.0}, code=1.0, msg=aaaaaaaaaaaaa}
3 {name=name, pwd=123, age=12.0}
Exception in thread "main" java.lang.ClassCastException: com.google.gson.internal.LinkedTreeMap cannot be cast to test.U
at test.GsonWhithOBJ.main(GsonWhithOBJ.java:28)
springMVC 返回一个json 是Map<String,Object>序列化的,客户端拿到这个json以后返序列化,需要得到put的,一个自定义对象,如何得到这个自定义对象呢? 因为这个map中必须带着 msg信息和 code 返回码(和其他的json接口返回的结构都要保持一致),所以只能使用泛型Map<String,Object>
序列化之后,之前的对象信息肯定已经丢失了,反序列化过来的是LinkedtreeMap,所以强转肯定会失败
你直接定义一个泛型对象就行了,如图
gson fastjson这些都是有自己的json对象的,你需要自己转成java对象
推荐用jackson直接得到的就是java标准对象 不用在自己做什么转换