![](/img/trans.png)
[英]Jersey client does not return or read response from multiple class objects
[英]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.