Spring Boot - Лучшая практика для HTTP POST-запроса без тела - PullRequest
0 голосов
/ 04 февраля 2020

У меня есть набор микросервисов, реализованных через Spring Boot, которые общаются через вызовы REST. Большинство вызовов POST передают сообщение для тела запроса и принимают другое сообщение для тела ответа. Однако у меня есть случай, когда мне не нужно ничего передавать в запросе, но я ожидаю ответа с данными.

Так что представьте что-то вроде:

POST http://somewhere.org:9876/some/path/someAction

, где нет тело запроса для отправки, но есть ожидаемое ответное сообщение. В коде:

Клиент:

GeneralResponse response = restTemplate.postForObject(url, null, GeneralResponse.class);

Контроллер сервера:

  @PostMapping(value = "/someAction", produces = MediaType.APPLICATION_JSON_VALUE)
  public DeferredResult<ResponseEntity<GeneralResponse>> someAction(/* note no args */) {
    DeferredResult<ResponseEntity<GeneralResponse>> result = new DeferredResult<>(timeout);
    executor.execute(new Runner(result));
    return result;
  }

Это «правильный» способ сделать это? Я видел несколько вопросов, задаваемых по SO по этой теме c, и кажется, что это нормально, но есть некоторые оговорки. Для меня имеет смысл сделать POST-вызов без тела; Я считаю, что это похоже на вызов функции или метода без аргументов.

Мне интересно, вызывает ли метод, использованный выше, проблемы в определенных ситуациях. Например, когда я запускаю службы "нормально", все работает нормально. Однако я пытаюсь настроить некоторые интеграционные тесты, и по какой-то причине тест завершается неудачно с ответом 503 службы. Еще более странным является то, что кажется, что последовательность сообщений / вызовов в запущенных службах фактически была запущена на основе выходных данных консоли службы.

...