对象无法映射到 POJO class

Object not being able to map to POJO class

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

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

我正在共享 FirstClassResponse 和 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

}

可能gson.fromJson无法转换之前class的属性class。你可以试试把firtClassResponse.getResponse()拿出来单独做转换

那个FirstClassResponse完全是多余的;请改用 SecondClassResponse
看看 JSON ...然后向我解释如何映射为 FirstClassResponse?

你甚至没有对象关系映射(就像 GSON 转换器那样),但你正在解析。

private Object response;

将其设为 SecondClassResponse,而不是对象。由于它是一个对象,GSON 不知道这应该是一个 SecondClassResponse,所以它只是将地图作为一个地图推在那里,这显然不能被投射。

使用 GSON 的全部意义在于将一切都变成特定的对象,这样您就可以以更 Java 的方式使用它。如果您在从 GSON 转换时将某些东西存储为对象,那么您几乎总是做错了。