Gson数据类型转换异常 java.lang.ClassCastException: com.google.gson.internal.出现原因已经解决方案 gson泛型指定

Gson数据类型转换异常 java.lang.ClassCastException: com.google.gson.internal.出现原因已经解决方案,

今天写项目发现了一个用gson做JSON串回List的数据对象时,报了这个错误,如下

        List userList;
        userList=gson.fromJson((jsonStr),List.class);
        System.out.println(userList.get(0));
        System.out.println(userList.get(0).getUserName());

在这里插入图片描述
数据类型转化异常
但是userList.get(0)确实可以正常拿到相应的数据,但是第4行的,getUserName()却会报如上的异常。

经过了一番探索之后,发现是因为Gson在处理Json字符串和对象二者转换时,对于有泛型的数据类型,需要做一个泛型指定,如 List 等

//先来看一个错误的写法, 0 0 随便试的 我敢说肯定很多人也试过
        //userList=gson.fromJson(jsonStr,List.class);
//正确操作
        userList=gson.fromJson(jsonStr,new TypeToken>(){}.getType());

通过 newTypeToken(){}.getType() 来指定特定泛型的数据转换,即可避免发生上面的泛型错误,而在未指定泛型的情况下,gson默认的是Map,这也是上面gson里为什么会出现 LinkedTreeMap cannot to be cast to User 的情况。

以上。

还有一个的方法就是把泛型指定这些问题交给Gson自己去处理,在外层封装一个非泛型的实体类,这也是我之前一直没发现会出现这个异常的原因,我自己基本上有服务端返回的JSON串都是一个Response类型,在Response类里将List作为它的域。

Response response=gson.fromJson(jsonStr,Response.class);
userList=response.getUserList();

你可能感兴趣的:(Java实际使用的常见问题)