RestTemplate
и базовые bean-компоненты Spring не предназначены для потоковой обработки, они строят весь ResponsEntity
в памяти.Исходя из вашего примера, вы не используете RestTemplate
по назначению.Вы читаете String
вместо делегирования объекта ответа Map<String, Object>
десериализации базовому компоненту-преобразователю.
Если ответ JSON действительно слишком велик, чтобы уместиться в вашу кучу, вы можете заменить RestTemplate
на URLConnection
или любую другую клиентскую библиотеку HTTP, которая позволит вам получить доступ к ответу InputStream
напрямую.Это позволит вам вручную прочитать и проанализировать ответ, например , используя com.google.gson.stream.JsonReader
:
URLConnection conn = // create and open
JsonReader reader = new JsonReader(new InputStreamReader(conn.getInputStream(), "UTF-8"));
// read manually using reader
Таким образом вы сможете сэкономить память, избегая одного большого String
объект, который содержит все тело JSON.