2017-05-09 82 views
2

博客文章http://farazdagi.com/blog/2014/rest-long-running-jobs(以及引用的资源)建议使用REST时,立即等待长时间运行的工作春RestController异步结果

  • 返回的有效载荷如果结果是已经可用时使用下面的场景返回请求。看起来像状态码OK的标准请求。
  • 进行响应状态代码中使用GET并等待异步结果首标改变要么接受,并添加一个位置,以及一个异步结果首标,让客户认识到,他们应该...
  • 投票返回的位置可用或取消。
  • 如果可用状态码SEE_OTHER,则返回另一个位置标题。按照地点获取结果。

我知道我可以返回例如一个CompletableFuture从一个方法,但这将阻止请求,直到未来完成。在Spring MVC中是否支持这种行为,或者有什么方法可以增强Spring MVC来实现此行为(例如,实现org.springframework.web.method.support.HandlerMethodReturnValueHandler?)

+0

您已经可以做到这一点。没有什么能够阻止你使用常规的'@ RestController'来做这件事......你将有1个方法返回1或2.如果是2,你的客户端需要轮询给定的URL(你可以实现)。你不需要为此定制任何东西。 –

回答

0

为了实现在Spring博客中推荐的行为,您应该不是从控制器返回CompletableFuture,除非该未来已经完成(在这种情况下状态码应为201)。

否则,你应该建立只是一个Location头空响应(含创建任务URL)和202状态代码,并返回一个代替,如果isDone()回报false为你的未来。