2015-04-19 26 views
3

我在Spring MVC上使用deferredResult,但使用此代碼,超時仍將HTTP代碼503發送回客戶端。在超時時更改deferredResult HTTP狀態代碼

future.onCompletion(new Runnable() { 
    @Override 
    public void run() { 

     if(future.isSetOrExpired()){ 
      response.setStatus(HttpServletResponse.SC_NO_CONTENT); 
     } 
    } 
}); 

任何想法還有什麼可以嘗試?

+0

不確定,但也許您應該使用'DeferredResult',如[本博客文章](http://callistaenterprise.se/blogg/teknik/2014/04/22/c10k-developing-non-blocking- rest-services-with-spring-mvc /) – beerbajay

+0

這就是我所做的。我只是想在deferredResult過期的情況下更改http代碼。默認情況下它總是返回503 – paul

回答

4

我遇到了同樣的問題。我的Spring MVC控制器方法最初返回DeferredResult <對象>但後來我意識到我想控制HTTP狀態代碼。我找到了答案在這裏:

http://www.jayway.com/2014/09/09/asynchronous-spring-service/

只需使用DeferredResult <ResponseEntity>,你可以同時設置響應,並在ResponseEntity的HTTP響應代碼。