对象无法映射到 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 转换时将某些东西存储为对象,那么您几乎总是做错了。
我收到了一个响应,我将其转换为 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 转换时将某些东西存储为对象,那么您几乎总是做错了。