Это правильный способ вернуть 204 «Нет содержимого» с помощью Spring? - PullRequest
2 голосов
/ 15 апреля 2019

Я пытаюсь удалить настройку ресурса http status NO_CONTENT с помощью Weblogic, и ответ занимает 30 секунд. Я неправильно использую Spring или в Weblogic есть ошибка?

Я пробовал это на Weblogic 12.2.1.0.0, используя Spring 5.0.12. Запрос выполнен, ресурс удален, но клиент ждет 30 секунд (браузер TTFB) после этого. Это похоже на тайм-аут.

В качестве обходного пути мы можем вернуть http статус OK .

@DeleteMapping(value = "/{id}")
public ResponseEntity<Void> delete(@PathVariable("id") Long id) {
    useCase.remove(id);
    return new ResponseEntity<>(HttpStatus.NO_CONTENT);
}

Я ожидал, что клиент немедленно получит ответ, но он ждет 30 секунд.

Ответы [ 3 ]

1 голос
/ 15 апреля 2019

По сравнению с ответом 200 ваш ответ 204 не имеет заголовка Content-Length. Попробуйте добавить его вручную, чтобы проверить, помогает ли сервер приложений обрабатывать пустое тело ответа:

return ResponseEntity.noContent().header("Content-Length", "0").build();
0 голосов
/ 16 апреля 2019

Это известная ошибка от OHS.https://support.oracle.com/knowledge/Middleware/2162306_1.html

Поведение состоит в следующем: плагин продолжает ожидать тело контента, а у 204 нет тела, наконец, он запускает тайм-аут чтения (это 30 с с).

Вам необходимо загрузить исправление и применить его к OHS или изменить код HTTP на обходной путь , возможно, на 202 (принято).

0 голосов
/ 15 апреля 2019

Вы также можете использовать @ResponseStatus аннотацию.

@DeleteMapping(value = "/{id}")
@ResponseStatus(HttpStatus.NO_CONTENT)
public ResponseEntity<Void> delete(@PathVariable("id") Long id) {}
...