Resttemplate - запросить само pojo или запросить строку json и проанализировать ее - PullRequest
0 голосов
/ 16 ноября 2018

У меня есть два варианта:

Запрос объекта

restTemplate.exchange(url, HttpMethod.GET, entity, Object.class);

или запрос JSON

restTemplate.exchange(url, HttpMethod.GET, entity, String.class);

и последующий синтаксический анализ.

За кулисами оба будут использовать JSON, но есть ли соглашение или лучшие практики?

Ответы [ 2 ]

0 голосов
/ 16 ноября 2018

Я думаю, что есть как минимум две причины, чтобы предпочесть RestTemplate демаршалинг вашего объекта вместо того, чтобы сначала получить String:

  1. вероятно, более эффективно использует память; но гораздо важнее
  2. это приводит к более чистому коду!

Если вы извлекаете String напрямую, вы должны сначала прочитать весь этот результат в память, а , а затем проанализировать его в вашей объектной модели. Преобразователи сообщений в RestTemplate имеют возможность считывать это в вашу объектную модель побайтно из ответа InputStream. Конечно, они могут быть не в состоянии построить граф объектов без загрузки всего ответа в память, но по крайней мере так вам не придется делать это дважды.

Но что более важно ... зачем вам делать это самостоятельно, когда Spring имеет закаленный в боях, бесконечно настраиваемый код, чтобы сделать это для вас?

Скажите, что каждый раз, когда вы получаете ответ JSON от RestTemplate, вы сами справляетесь с ним:

MyThing thing = objectMapper.readValue(stringResult, MyThing.class);

... разве эта строчка не стоит экономить? В связи с этим, я бы сказал, что JSON Umarshalling по своей сути является сквозной задачей, которая имеет смысл настраивать централизованно.

0 голосов
/ 16 ноября 2018

Вы можете создать объект java для соответствующего json, тогда ответ будет автоматически сериализован:

restTemplate.exchange(url, HttpMethod.GET, entity, MyResponseBean.class);

Для создания Java-бобов jsonschema2pojo полезно.

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