Подключение конечной точки REST Spring Boot не освобождается - PullRequest
1 голос
/ 15 мая 2019

Я создал конечную точку REST Spring boot (2.1.4.RELEASE) для получения некоторых данных с сервера. Когда я вызываю эту конечную точку из браузера, я вижу JSON в окне браузера, но я замечаю, что значок spinner in fav продолжается в течение 60 секунд. Когда я смотрю на вкладку сети, я никогда не вижу раздел ответа на запрос. Через 60 секунд написано, что это не удалось. Когда я прохожу код в отладчике, я вижу, что данные возвращаются из контроллера, и когда я «играю» остальную часть стека, все завершается (поток, который назначается для обслуживания запроса), я отчасти озадачен тем, что вызывает это поведение.

@GetMapping(path="/recipes")
public ResponseEntity<Collection<HpManifest>> getRecipes() {
    ResponseEntity<Collection<HpManifest>> response = hpService.getRecipes();
    return response;
}

public ResponseEntity<Collection<HpManifest>> getRecipes() {
    logger.info("Retrieving recipes from");

    UriComponentsBuilder builder = 
            UriComponentsBuilder.fromHttpUrl(endpointManifests)
                .queryParam("type", HpManifestType.RECIPE.getType());

    logger.info("REST endpoint: " + builder.toUriString());

    ResponseEntity<Collection<HpManifest>> recipes = restTemplate.exchange(
            builder.toUriString(), 
            HttpMethod.GET, null, new ParameterizedTypeReference<Collection<HpManifest>>() {});

    logger.info("recipes are:");
    recipes.getBody().forEach(r -> logger.info(r.toString()));

    return recipes;
}

enter image description here

1 Ответ

1 голос
/ 15 мая 2019

Я столкнулся с подобной проблемой только на днях.В моем случае оказалось, что recipes (возвращается из метода restTemplate.exchange) содержит Transfer-Encoding: chunked в заголовках, а затем, когда вы возвращаете recipes, ваш весенний каркас, вероятно, также включает заголовок Content-Length,Комбинация этих двух заголовков в ответе браузеру может вызвать проблемы, потому что браузер думает, что он возвращает фрагментированные данные, но на самом деле это не так.Я предлагаю создать новую ResponseEntity из вашей переменной recipes в соответствии с:

return ResponseEntity.status(recipes.getStatusCode()).body(response.getBody());

В качестве альтернативы вы можете заставить ваш весенний каркас возвращать фрагментированные данные, но я думаю, что это не правильный путьидти.

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