Кастомный десериализатор для разбора комплекса Json - PullRequest
0 голосов
/ 21 января 2019

Я должен десериализовать ниже 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, чтобы поднять AreaOfInterest , как показано ниже

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 вместо одного, одно означает, что все поля пусты, кроме footBall остальное действительно student кроме footBall как ноль, любая помощь, как получить один объект со всеми полями, будет очень полезна, заранее спасибо.

1 Ответ

0 голосов
/ 21 января 2019

Это не будет вашим точным ответом, но может быть проще использовать gson, чтобы получить карту и построить свое pojo из этой карты.В качестве альтернативы, если вам не нравится карта, создайте pojo, похожее на ваш JSON, и сопоставьте его с pojo, которое вы хотите.

Справочная информация / обоснование: GSON сейчас является выбранным вами картографом, номожет быть изменен на что-то другое, например.Джексон, и все ваши пользовательские, специфичные для фреймворков, необходимо будет преобразовать / изменить, если это произойдет.Использование gson для создания объекта, который выглядит как источник, и сопоставления этого с вашим пользовательским POJO в вашем контроллере сделает ваши намерения кода ясными, а ваш код более устойчивым к изменениям каркаса.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...