Unmarshell с настройкой десериализатора с использованием Джексона - PullRequest
1 голос
/ 19 июня 2020

у меня есть строка json вроде этой

{"jobs":[{"id":"1","state":"Visited","runTime":6224,"finalJobAssignment":{"owner":"10.107.181.236:5363",
"resourceId":"11",
"listingPositions":["11"]},"keys":1765624,"range":{"startPrefix":"aa",
"endPrefix":"bb"},"resources":[{"resourceId":"11"}]},{"id":"2","state":"Visited","runTime":6224,"finalJobAssignment":{"owner":"10.107.181.236:5363",
"resourceId":"22",
"listingPositions":["22","33"]},"keys":1765624,"range":{"startPrefix":"cc",
"endPrefix":"dd"},"resources":[{"resourceId":"22"}]}]}

Я пытаюсь десериализовать с помощью настраиваемого десериализатора, мне нужны только resourceId, startPrefix, endPrefix иistingPositions (который является списком) из json массив, как мне избавиться от «заданий» и вернуть список моих настраиваемых объектов?

настраиваемый объект имеет только указанные выше полезные поля

В настоящее время у меня есть что-то вроде этого

private List<AuditEntry> deserialize(final JsonNode node,
                                         final DeserializationContext deserializationContext) throws IOException {
        List<AuditEntry> res =  new ArrayList<>();
        Iterator<JsonNode> iterator = node.get(JOBS_KEY).elements();
        while (iterator.hasNext()) {
            JsonNode jsonNode = iterator.next();
            final String startKey = jsonNode.get(RANGE_KEY).get(START_PREFIX_KEY).asText();
            final String endKey = jsonNode.get(RANGE_KEY).get(END_PREFIX_KEY).asText();
            final String partitionId;
            final String resourceId;
            final List<JournalChapterAndSN> listingPositions;
            final JsonParser listingPositionsParser;


                resourceId = jsonNode.get(FINAL_JOB_ASSIGNMENT_KEY).get(RESOURCE_ID_KEY).asText();

                listingPositionsParser = jsonNode.get(FINAL_JOB_ASSIGNMENT_KEY).get(LISTING_POSITIONS_KEY).traverse();

                listingPositionsParser.nextToken();

                List<String> listingPositionsString = deserializationContext.readValue(listingPositionsParser, List.class);

                }
            }

            res.add(new AuditEntry(range, partitionId, listingPositions));

        }
        return res;


    }

Однако при обработке listPositionString, DeserializationContext, похоже, использует мой настраиваемый десериализатор вместо стандартного, что приводит к npe, как я могу решить эту проблему?

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