簡體   English   中英

Jersey 2 - 從資源方法返回客戶端的響應

[英]Jersey 2 - return Client's Response from resource method

我為上游服務器 (U) 構建了一個反向代理 (P)。 客戶端應用程序(C)將向 P 發出請求,P 又將向 U 發出請求,而 U 返回的結果應通過代理 P 返回給客戶端 C。

當我像這樣在 P 中編寫代碼時(我希望代理盡可能通用,並支持多種結果類型):

Client client = // get the client
Invocation.Builder builder = // configure the call to U
return builder.get(InputStream.class);

它適用於 JSON 和二進制數據,返回結果,但Content-Type標頭始終設置為application/octet-stream ,這是錯誤的。 我可以檢查來自 U 的類型的結果並將其設置為來自我的代理 P 的響應,但隨后我將不得不處理錯誤處理等,而當我只返回 InputStream 並發生錯誤時, builder.get()方法拋出一個異常,然后將其傳播到客戶端。

我實際上只想將 U 返回的 Response 用作 P 的返回值,如下所示:

Client client = // get the client
Invocation.Builder builder = // configure the call to U
return builder.get(); // returns Response

客戶端 C,在我的例子中是 Python 3 requests應用程序,收到以下錯誤:

requests.exceptions.ConnectionError: ('Connection aborted.', RemoteDisconnected('Remote end closed connection without response',))

我嘗試了以下代碼:

Response upstreamResponse = client./* code code */.get();
upstreamResponse.bufferEntity();
return Response.fromResponse(upstreamResponse);

但是,唉,結果是一樣的。

我錯過了什么?

我本來希望代理通過內容類型(可能還有其他內容,如內容長度和狀態)。 所以它看起來更像:

Response upstreamResponse = client./* code code */.get();
upstreamResponse.bufferEntity();
return Response.status(upstreamResponse.status())
               .type(upstreamResponse.getMediaType()
                // and so on

實際上,您可能也可能不想要來自 upstreamResponse 標頭的許多東西 - 例如 Cookies 呢?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM