繁体   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