Передача MIssingNode в ObjectMapper для преобразования в POJO - PullRequest
0 голосов
/ 21 сентября 2018

Я конвертирую дочерний узел "корневого" JsonNode в POJO.Если POJO не существует в JSON, выдается MismatchedInputException.

  JsonNode pojoJson = rootJson.path("pojoName");
  Pojo[] pojoArray = mapper.treeToValue(pojoJson, Pojo[].class);

Мне было интересно, есть ли более изящный способ обработать это исключение, кроме необходимости проверять с помощью has() каждый раз, когда я хочу преобразовать JsonNode в POJO?

Ответы [ 2 ]

0 голосов
/ 21 сентября 2018

Ну, нет способа сделать это "ясно".У Джексона нет таких методов, как rootJson.path("pojoName", *defaultValue*) или mapper.treeToValue(pojoJson, Pojo[].class, *defaultValue*).Но у вас есть несколько вариантов.

1) Используйте with и withArray вместо path.

Пусто ObjectNodeи ArrayNode будет возвращено там с методами.Будет возвращен пустой массив, а MismatchedInputException не будет выброшено.

Но:

  • with* методы не только возвращают *Node.Если свойства не существует, новый узел будет создан и добавлен к вашему rootJson.
  • Используйте withArray в случае преобразования ObjectNode в массив.

2) Используйте isMissingNode для обнаружения отсутствующих узлов.

path метод возвращает специальный MissingNode , если свойства не существует.

0 голосов
/ 21 сентября 2018

Вы можете проверить тип узла заранее: if (pojoJson != null && pojoJson.getNodeType() == JsonNodeType.ARRAY) или даже проще if (pojoJson != null && pojoJson.isArray()).

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