2015-01-14 129 views
0

我試圖從下面的方法立即得到響應,並繼續進行其餘的過程。但我沒有看到我的返回值「TestAync」隨時。您可以請建議如何從下面的調用中檢索(客戶端代碼)響應。Jersey Rest異步響應

這是我正在打的客戶電話,感謝您的幫助。 未來響應= ClientBuilder.newClient()。target(「http://localhost:8080/testasync/test/async/test5」).request()。async()。get();

@GET 
@Path("async/{echo}") 
public String asyncEcho(@PathParam("echo") final String echo, @Suspended final AsyncResponse ar) { 
    TASK_EXECUTOR.submit(new Runnable() { 

     @Override 
     public void run() { 
      try { 
       Thread.sleep(SLEEP_TIME_IN_MILLIS); 
      } catch (InterruptedException ex) { 
       ar.cancel(); 
      } 
      ar.resume(echo); 
     } 
    }); 
    return "TestAysnc"; 
} 

回答

1

在異步情況下的返回值(TestAsync)被忽略,因爲JAX-RS運行時(例如,新澤西)期望被髮送回客戶端的實體將通過AsyncResponse#resume(Object)呼叫來提供。

在您的特殊情況下,由於您正在使用此字符串對象恢復異步響應,因此test5將返回給客戶端。

欲瞭解更多信息,請在澤西島用戶指南Asynchronous Server API或閱讀JAX-RS 2.0 Specification

+0

謝謝米哈爾,有沒有什麼辦法可以實現使用休息異步並返回值,然後繼續執行其餘任務。我嘗試了很多選擇,但最終爲任務創建了Executor線程並將值(ACK)返回給客戶端。 (這完全是我自定義的異步方法實現)。請讓我知道這是否是一個推薦選項。 – Suresh