Задача состоит в том, чтобы с сайта по запросу забрать Json, и десериализовать его в объект класса.
public class Answer {
private Info info;
private Episode[] results;
}
с помощью метода
public Answer requestAllEpisodes(){
String jsonObject = restClient.get()
.uri(API_ENDPOINT_EPISODE)
.retrieve()
.body(String.class);
return new Gson().fromJson(jsonObject, Answer.class);
}
В зависимости от параметров запроса в ответе может быть массив из трех разных объектов
public class Episode {
private int id;
private String name;
private String air_date;
private String episode;
private String[] characters;
@SerializedName("url")
private String thisEpisodeEndpoint;
private String created;
}
public class Location {
private int id;
private String name;
private String type;
private String dimension;
private List<Character> residents;
@SerializedName("url")
private String thisLocationEndpoint;
private String created;
}
public class Character{
@SerializedName("id")
private int id;
@SerializedName("name")
private String name;
@SerializedName("status")
private String status;
@SerializedName("species")
private String species;
@SerializedName("type")
private String type;
@SerializedName("gender")
private String gender;
@SerializedName("origin")
private Location originLocation;
@SerializedName("location")
private Location lastKnownLocation;
@SerializedName("image")
private String avatarImage;
@SerializedName("episode")
private String[] episodesUrl;
@SerializedName("url")
private String thisCharacterEndpoint;
@SerializedName("created")
private String created;
}
Соответственно, хорошо бы сделать обобщенный класс
public class Answer<T> {
private Info info;
private T[] results;
}
Я понимаю, что нужно переписать метод, чтобы он принимал на вход класс обобщенный каким-либо из трех объектов каким-то подобным образом, и передавал его вместо Answer.class в метод fromJson(), но на текущий момент, чтобы я не пробовал получаю ClassCastException при десериализации.
public <T> Answer<T> requestAllEpisodes(Class<T> clazz){
String jsonObject = restClient.get()
.uri(API_ENDPOINT_EPISODE)
.retrieve()
.body(String.class);
return new Gson().fromJson(jsonObject, Answer.class);
}