arqam
arqam

Reputation: 3789

Object not being able to map to POJO class

I am getting a response, which I converted to Pojo class with one field of type Object. Now when I am trying to cast the Object type to another Pojo class its throwing the error :

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

Code :

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;
}

Here, firsClass object when printed gives following result :

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}]

Now, the error happens in the following line :

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

I am sharing the POJO for FirstClassResponse and SecondClassResponse :

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

}

Upvotes: 0

Views: 678

Answers (3)

Gabe Sechan
Gabe Sechan

Reputation: 93668

private Object response;

Make this a SecondClassResponse, not an Object. With it being an Object, GSON doesn't know that this should be a SecondClassResponse, so it just shoves the map in there as a Map, which obviously can't be cast.

The entire point of using GSON is to turn everything into specific objects so you can use it in a more Java like way. If you store something as an Object when converting from GSON, you're almost always doing it wrong.

Upvotes: 1

Martin Zeitler
Martin Zeitler

Reputation: 76769

That FirstClassResponse is completely superfluous; use SecondClassResponse instead.
Just look at the JSON ...and then explain to me how to map as FirstClassResponse?

And you've not even object-relational mapping (as the GSON converter does), but you're parsing.

Upvotes: 1

xzg
xzg

Reputation: 191

Perhaps gson.fromJson cannot convert the attribute class of the class before. You can try to take out firtClassResponse.getResponse() and do the conversion separately

Upvotes: 0

Related Questions