У меня есть набор микросервисов, реализованных через 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 службы. Еще более странным является то, что кажется, что последовательность сообщений / вызовов в запущенных службах фактически была запущена на основе выходных данных консоли службы.