Map 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 fromJsonMap = new Gson().fromJson(json, new TypeToken>() { }.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>

你好 比如我要 map.put("user",User) map.put("groups",List<group>) map.put("page",Page) 这样多种类型的数据,怎么用一个result返回,是不是必须把这几种类型的数据封装到一个新的类型A中再 指定Reslt<A> r=new Reslt<A>();
public static <T> Map<String, T> toMap(String jsonStr, Class<T> clazz) {
    if (StringUtils.isBlank(jsonStr)) {
        return null;
    Map<String, T> stringTMap = gson.fromJson(jsonStr, new MapParameterizedType(clazz));
    return stringTMap;
static class MapParameterizedType<T> implements ParameterizedType {
    private Class<T> clazz;
    protected MapParameterizedType(Class<T> clazz) {
        this.clazz = clazz;
    @Override
    public Type[] getActualTypeArguments() {
        return new Type[]{String.class, clazz};
    @Override
    public Type getRawType() {
        return Map.class;
    @Override
    public Type getOwnerType() {
        return null;
                             评论 (0)