Сообщение в блоге http://farazdagi.com/blog/2014/rest-long-running-jobs (а также упомянутые ресурсы) рекомендуют использовать следующий сценарий при использовании REST для ожидания длительных заданий.
- Немедленно возвращайте полезную нагрузку, если результат уже доступен при возврате запросов. Выглядит как стандартный запрос с кодом состояния OK.
- Ответьте с кодом состояния ACCEPTED и добавьте Location, а также заголовок Async-Result, чтобы клиенты знали, что они должны...
- Опросите возвращенное местоположение с помощью GET и подождите, пока заголовок Async-Result не изменится на Available или Cancelled.
- В случае Доступно возвращается код состояния SEE_OTHER и другой заголовок Location. Следуйте по локации, чтобы получить результат.
Я знал, что могу вернуться, например. CompletableFuture
из метода, но это заблокирует запрос до тех пор, пока не будет завершено будущее. Есть ли какая-либо поддержка такого поведения в Spring MVC или есть ли способ улучшить Spring MVC для реализации этого поведения (например, реализовать org.springframework.web.method.support.HandlerMethodReturnValueHandler
?)
@RestController
... У вас будет 1 метод, который либо возвращает 1, либо 2. В случае 2 ваш клиент должен опросить данный URL-адрес (который вы можете реализовать). Для этого не нужно ничего кастомного. - person M. Deinum   schedule 09.05.2017