dmvip 发表于 2021-5-21 09:42

Java gson 数据转换问题求助-

本帖最后由 dmvip 于 2021-5-21 11:54 编辑

我现在需要的是把网络返回的json字符串通过Gson转让换成对象(Result就是用户接收数据的类型)
这是我转接口代码
public abstract class HttpCallback<Result> implements ISuccess {
    @Override
    public void onSuccess(String result) {//result就是网络回来的数据
      //result把转换成用户需要的对象
      Gson gson = new Gson();
      //需要得到用户输入的对象对应的字节码是什么样的
      //得到用户接收数据的对象对应的class
      Class<?> clz = getSuperClassGenricType(this.getClass(), 0);

      Result objResult = (Result) gson.fromJson(result, clz);

      //把已经转好的对象,交给用户
      onSuccess(objResult);
    }

    public abstract void onSuccess(Result result);

    public static Class getSuperClassGenricType(Class clazz, int index) throws IndexOutOfBoundsException {

      Type genType = clazz.getGenericSuperclass();

      if (!(genType instanceof ParameterizedType)) {
            return Object.class;
      }

      Type[] params = ((ParameterizedType) genType).getActualTypeArguments();

      if (index >= params.length || index < 0) {
            return Object.class;
      }
      if (!(params instanceof Class)) {
            return Object.class;
      }
      return (Class) params;
    }
}

result是 网络返回的json数据:
{
    "code": 0,
    "data": {
      "age": 1,
      "name": "test0"
    },
    "success": true
}

通过Gosn 需要转的Response对象,如果这样是没问题的,可以正常转换,
public class Response {

    public int code;
    public String msg;
    public boolean success;
    public DataEntity data;

   
      public class DataEntity {
      public String name;
      private Integer age;
    }
}

我现在需要把 DataEntity 提取出来,放在泛型里面,正常的javaBen 是没有问题 就是加泛型在转的时候报错了,
public class Response<Result> {

    public int code;
    public String msg;
    public boolean success;
    public Result data;

}

new HttpCallback<Response<DataEntity>>() {
                  @Override
                  public void onSuccess(Response<DataEntity> response) {
                     
                  }
                })

然后我去是现实这个接口就报换错误,跪求大神解答


报错信息:com.google.gson.internal.LinkedTreeMap cannot be cast to xxxxxx

javazjl 发表于 2021-5-21 10:47

public class Response<T> {

    public int code;
    public String msg;
    public boolean success;
    public T data;
}

dmvip 发表于 2021-5-21 11:04

javazjl 发表于 2021-5-21 10:47
public class Response {

    public int code;


T 和Result 是一样的 就一个占位符 而已

Mango_943 发表于 2021-5-21 14:22

为啥不用fastJSON或者jackson 第三方的用着不香?

天煞孤星888 发表于 2021-5-21 15:05

打印一下完整的报错信息是什么,对症下药

15198759548 发表于 2021-5-21 15:53

pojo权限改private,加上get,set试试

leon406 发表于 2021-5-22 10:09

泛型没有声明,Result就是个类, 不是泛型

HttpCallback<Result> 这个onSuccess回调返回的是Result类型,不是泛型

dmvip 发表于 2021-5-22 10:51

leon406 发表于 2021-5-22 10:09
泛型没有声明,Result就是个类, 不是泛型

HttpCallback 这个onSuccess回调返回的是Result类型,不是泛 ...

应该怎么解决呢?
页: [1]
查看完整版本: Java gson 数据转换问题求助-