Мне нужно десериализовать ниже Json
{
"Student": [
{
"Number": "12345678",
"Name": "abc"
"Country": "IN",
"AreaOfInterest": [
{
“FootBall”: “Yes”,
“Cricket”: “No”
}
]
}
],
"hasMore": false,
"links": [
{
"rel": "self",
"kind": "collection"
}
]
}
ниже POJO
class {
private String number;
private String name;
private String footBall;
}
Я написал собственный десериализатор Gson, чтобы поднять Круг интересов, как показано ниже.
public List<? extends Student> deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) throws JsonParseException {
var jsonObject = json.getAsJsonObject();
Stream<JsonElement> student = StreamSupport.stream(jsonObject.getAsJsonArray("Student").spliterator(), true);
Stream<JsonElement> areaOfInterest = StreamSupport.stream(jsonObject.getAsJsonArray("Student").get(0).getAsJsonObject().get("AreaOfInterest").getAsJsonArray().spliterator(), true);
Stream.concat(student,areaOfInterest)
.map(it -> context.deserialize(it, Student.class))
.map(Student.class::cast)
.collect(List.collector())
}
Но десериализатор, возвращающий два объекта Student вместо одного, один - все поля пустые, кроме футбол, другой - фактический ученик, за исключением футбол как нулевой, любая помощь, как получить один объект со всеми полями, будет очень полезна, заранее спасибо.




Это не будет вашим точным ответом, но может быть проще использовать gson для получения карты и создания вашего pojo из этой карты. В качестве альтернативы, если вам не нравится карта, создайте pojo, который выглядит как ваш JSON, и сопоставьте этот pojo с нужным вам pojo.
Предыстория/обоснование: GSON — это картограф, который вы выбрали прямо сейчас, но его можно изменить на что-то другое, например. Джексон, и все ваши пользовательские картографы, специфичные для фреймворка, должны быть преобразованы/изменены, если это произойдет. Использование gson для создания объекта, который выглядит как источник, и сопоставление его с вашим пользовательским POJO в вашем контроллере сделает ваше намерение кода ясным, а ваш код более устойчивым к изменениям фреймворка.
Это прекрасно, приятель, просто имейте в виду соотношение затрат и выгод. Если оно того стоит, удачного взлома ?
Спасибо, Ричард, я согласен, но я планирую использовать пользовательский десериализатор Ученик в качестве универсального, например, ПлощадьИнтересов, некоторые другие сложные JsonElement могут быть добавлены к исходному, поэтому я просто пытаюсь сделать его как можно более универсальным.