java.lang.ClassCastException: com.google.gson.internal.LinkedTreeMap 异常问题解决

问题

使用 Gson的 fromJson方法字符转成对象,操作转换的对象一直报错

java.lang.ClassCastException: com.google.gson.internal.LinkedTreeMap

部分代码如下

public class TestDataPojo<T> extends BaseEntity {

    private T data;
    private TestData testData;

    public T getData() {
        return data;
    }

    public void setData(T data) {
        this.data = data;
    }

    public TestData getTestData() {
        return testData;
    }

    public void setTestData(TestData testData) {
        this.testData= testData;
    }
}

public static <T> T jsonToObject(String jsonStr, Class<T> clazz) {
	return getGson().fromJson(jsonStr,clazz);
}


public static Gson getGson() {
	GsonBuilder gsonBuilder = new GsonBuilder();
	gsonBuilder.setDateFormat("yyyy-MM-dd HH:mm:ss");
	gsonBuilder.registerTypeAdapter(Timestamp.class,
				new TimestampTypeAdapter());
	gsonBuilder.disableHtmlEscaping();
	Gson gson = gsonBuilder.create();
	return gson;
}

public void getWareList() {
    try {
       List<TestDataPojo<TestPojo>> returnList = jsonToObject(testListStr,List.class);
       TestPojo testPojo = siteDataPojos.get(0).getData();
    } catch (Exception e) {
    }
    return null;
}

调试到  TestPojo testPojo = siteDataPojos.get(0).getData(); 代码就报错

问题原因:

GSON 解析的时候不知道TestDataPojo<T>中T具体是什么类型

解决方法:

使用GSON转换格式的时候指定具体类型就可以转换成功

/**
  *新添加根据具体类型转换对象方法
  **/
public static <T> T jsonToObject(String jsonStr, Type listType) {
        return getGson().fromJson(jsonStr,listType);
}

Type listType = new TypeToken<List<SiteDataPojo<WarePojo>>>() {}.getType();
List<TestDataPojo<TestPojo>> returnList = jsonToObject(testListStr,listType);

修改代码如下

public class TestDataPojo<T> extends BaseEntity {

    private T data;
    private TestData testData;

    public T getData() {
        return data;
    }

    public void setData(T data) {
        this.data = data;
    }

    public TestData getTestData() {
        return testData;
    }

    public void setTestData(TestData testData) {
        this.testData= testData;
    }
}

public static <T> T jsonToObject(String jsonStr, Class<T> clazz) {
	return getGson().fromJson(jsonStr,clazz);
}

/**
  *新添加根据具体类型转换对象方法
  **/
public static <T> T jsonToObject(String jsonStr, Type listType) {
		return getGson().fromJson(jsonStr,listType);
}


public static Gson getGson() {
	GsonBuilder gsonBuilder = new GsonBuilder();
	gsonBuilder.setDateFormat("yyyy-MM-dd HH:mm:ss");
	gsonBuilder.registerTypeAdapter(Timestamp.class,
				new TimestampTypeAdapter());
	gsonBuilder.disableHtmlEscaping();
	Gson gson = gsonBuilder.create();
	return gson;
}

public void getWareList() {
    try {
       Type listType = new TypeToken<List<SiteDataPojo<WarePojo>>>() {}.getType();
       List<TestDataPojo<TestPojo>> returnList = jsonToObject(testListStr,listType);
       TestPojo testPojo = siteDataPojos.get(0).getData();
    } catch (Exception e) {
    }
    return null;
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值