2017-05-09 108 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爲你的未來。