Java 泽西岛2号-返回客户';s对资源方法的响应

Java 泽西岛2号-返回客户';s对资源方法的响应,java,jax-rs,jersey-2.0,Java,Jax Rs,Jersey 2.0,我为上游服务器(U)构建了一个反向代理(p)。客户端应用程序(C)将向P发出请求,P将向U发出请求,U返回的结果应通过代理P返回给客户端C 当我这样用p编写代码时(我希望代理尽可能通用,并支持多种结果类型): 它同时适用于JSON和二进制数据,返回结果,但内容类型头始终设置为应用程序/octet流,这是错误的。我可以检查U的结果中的类型,并在我的代理P的响应中将其设置为,但随后我将不得不处理错误等。然而,当我刚刚返回InputStream并发生错误时,builder.get()方法抛出一个异常,

我为上游服务器(U)构建了一个反向代理(p)。客户端应用程序(C)将向P发出请求,P将向U发出请求,U返回的结果应通过代理P返回给客户端C

当我这样用p编写代码时(我希望代理尽可能通用,并支持多种结果类型):

它同时适用于JSON和二进制数据,返回结果,但
内容类型
头始终设置为
应用程序/octet流
,这是错误的。我可以检查U的结果中的类型,并在我的代理P的响应中将其设置为,但随后我将不得不处理错误等。然而,当我刚刚返回InputStream并发生错误时,
builder.get()
方法抛出一个异常,然后将其传播到客户端

实际上,我只想取U返回的响应,并将其用作p的返回值,如下所示:

Client client = // get the client
Invocation.Builder builder = // configure the call to U
return builder.get(); // returns Response
客户端C(在我的例子中是Python 3
请求
应用程序)出现以下错误:

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标题中的许多内容-例如Cookie呢?

这正是我的观点-我不想这样做,我只想做“return Updstream Response”,它已经设置了您提到的所有内容,我不需要做任何事情。我不认为你能得到这个——代理是一个有点特殊的用例。但我可以看到一个非常简单的方法来复制你想要的。您甚至可以像许多代理一样添加一个头来指示IP,例如,请求转发的目的。但总的来说,我认为你必须自己动手。只需一句话——我不是在写一份成熟的、通用的委托书;我正在为我非常专业的用例编写一个小实用程序。但是,我仍然不知道为什么我不能直接返回来自上游资源的任何东西,那里一定有某种东西,比如标头或其他东西,会破坏流。
Response upstreamResponse = client./* code code */.get();
upstreamResponse.bufferEntity();
return Response.status(upstreamResponse.status())
               .type(upstreamResponse.getMediaType()
                // and so on