gson 对象无法Map到POJO类

nr7wwzry  于 2022-11-06  发布在  其他
关注(0)|答案(3)|浏览(155)

我得到了一个响应,我将其转换为Pojo类,其中包含一个Object类型的字段。现在,当我试图将Object类型转换为另一个Pojo类时,它会抛出错误:

java.lang.ClassCastException: com.google.gson.internal.LinkedTreeMap cannot be cast to SecondClass

编码:

FirstClassResponse firstClassResponse = (FirstClassResponse) convertJSONToObject(firstClassResponseJson, FirstClassResponse.class);

//jsonToObject method 
public static Object convertJSONToObject(String jsonRequest, Class objectClassType) throws Exception {
    Object object = gson.fromJson(jsonRequest, objectClassType);
    return object;
}

在这里,firsClass对象在打印时给出以下结果:

FirstClassResponse [modifiedResponse=null, response={id=123, username=abc, balance=0.0, currencycode=EUR, created=2021-03-30 16:31:54, agent_balance=0.0, sessionid=123}]

现在,错误发生在以下行中:

SecondClassResponse modifiedResponse = (SecondClassResponse) firstClassResponse.getResponse();
java.lang.ClassCastException: com.google.gson.internal.LinkedTreeMap cannot be cast to SecondClassResponse

我正在共享第一类响应和第二类响应的POJO:

public class FirstClassResponse{

    private SecondClassResponse modifiedResponse;

    private Object response;
    //getter, setter 
}

public class SecondClassResponse{

    private String id;
    private String username;
    private double balance;
    private String currencycode;
    private String created;
    private double agent_balance;
    private String sessionid;
    //getter, setter

}
polkgigr

polkgigr1#

private Object response;

把它变成一个SecondClassResponse,而不是一个Object。由于它是一个Object,GSON不知道它应该是一个SecondClassResponse,所以它只是把map作为一个Map推到那里,这显然是不能被强制转换的。
使用GSON的全部目的是将所有内容转换为特定的对象,以便您可以以更像Java的方式使用它。如果在从GSON转换时将某些内容存储为Object,则几乎总是做错了。

cwxwcias

cwxwcias2#

FirstClassResponse完全是多余的;请改用SecondClassResponse
只要看看JSON...然后向我解释如何Map为FirstClassResponse
您甚至还没有对象关系Map(像GSON转换器那样),但您正在进行解析。

kq0g1dla

kq0g1dla3#

可能gson.fromJson之前无法转换类的属性类,可以尝试取出firtClassResponse.getResponse(),单独进行转换

相关问题