Прочитайте большой JSON ответ, используя WebClient или RestTemplate за один раз - PullRequest
0 голосов
/ 26 февраля 2020

Возникла проблема при чтении больших данных JSON (> 100 МБ) с использованием webClient за один раз (фрагменты / разбиение на страницы не поддерживаются со стороны клиента). Также я попытался использовать restTemplate, но не повезло.

Код WebClient:

public List<Phone> fetchPhoneDetails(PhoneRequest request) {
        try {
            PhoneResponseDTO response = webClientBuiler.build()
                    .post()
                    .uri(url)
                    .contentType(MediaType.APPLICATION_JSON).accept(MediaType.APPLICATION_JSON)
                    .body(BodyInserters.fromObject(request))
                    .retrieve().bodyToMono(PhoneResponseDTO.class).block();

            if(null != response.getResponse()) {
                return objectMapper.convertValue(response.getResponse(), new TypeReference<List<Phone>>(){ });
            }
        } catch (HttpClientErrorException e) {
            throw e;
        }
        return new ArrayList<>();
    }

Использование RestTemplate:

@Override
    public List<Phone> fetchPhoneDetails(Phone request) {
        try {
            HttpEntity<Phone> requestEntity = new HttpEntity<>(request, getHttpHeaders());
            PhoneResponseDTO response = new RestTemplate().postForObject(url, requestEntity, PhoneResponseDTO.class);
            if(null != response && null != response.getResponse()) {
                return objectMapper.convertValue(response.getResponse(), new TypeReference<List<Phone>>(){ });
            }
        } catch (HttpClientErrorException e) {
            throw e;
        }
        return new ArrayList<>();
    }

Ошибка:

com.fasterxml.jackson.core.io.JsonEOFException: Unexpected end-of-input in VALUE_STRING
 at [Source: (PushbackInputStream); line: 1, column: 84980163]
    at com.fasterxml.jackson.core.base.ParserMinimalBase._reportInvalidEOF(ParserMinimalBase.java:618) ~[jackson-core-2.9.9.jar:2.9.9]

Любая помощь будет принята с благодарностью.

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