【发布时间】:2017-10-07 08:37:28
【问题描述】:
博文http://farazdagi.com/blog/2014/rest-long-running-jobs(以及引用的资源)建议在使用REST等待长时间运行的作业时使用以下场景
- 如果在返回请求时结果已经可用,则立即返回有效负载。看起来像是带有状态代码 OK 的标准请求。
- 响应状态码 ACCEPTED 并添加 Location 以及 Async-Result 标头,让客户认识到他们应该...
- 使用 GET 轮询返回的位置并等待 Async-Result 标头更改为可用或已取消。
- 如果可用,则返回状态代码 SEE_OTHER 并返回另一个 Location 标头。按照位置获取结果。
我知道我可以返回,例如来自方法的CompletableFuture,但这将阻止请求,直到未来完成。在 Spring MVC 中是否支持这种行为,或者有什么方法可以增强 Spring MVC 来实现这种行为(例如,实现 org.springframework.web.method.support.HandlerMethodReturnValueHandler ?)
【问题讨论】:
-
您已经可以这样做了。没有什么能阻止您使用常规的
@RestController... 您将有 1 个返回 1 或 2 的方法。如果是 2,您的客户端需要轮询给定的 URL(您可以实现)。你不需要为此定制任何东西。
标签: rest spring-mvc spring-boot spring-rest