如何在Java中读取OutboundJaxrsResponse的内容

5

我编写了一个使用Jersey的服务。在返回Response对象的最后一个类中,我有如下代码:

Stream<Revision> revisionss = dataSourceHandler.getRevisions( .... );
StreamingOutput stream = os -> objectHistoryWorker.revisionsTransfer(revisions, os);
return Response.ok(stream).build();

这会获取到一个Revision对象的流,将其转换为StreamingOutput,然后在Response中发送出去。
我正在尝试编写集成测试来测试这个功能,并想查看Response实际包含的内容。换句话说,我想知道例如:
  • 有多少Revision对象存在
  • Revision对象是否包含正确的信息
我遇到的问题是它是一个OutboundJaxrsResponse,它不支持readEntity()方法。
它有一些返回它是否通过的方法(即状态码200),但我似乎找不到一种实际读取Response内容的方法。
有没有办法获取这些信息?
(期望的响应内容将以Json格式呈现)

你看过https://jersey.java.net/documentation/latest/test-framework.html吗?你可以在客户端-服务器设置中运行测试,这可能使你能够询问从方法返回的响应。如果我没记错的话,你的Jersey应用程序是在轻量级容器中运行的,并且你通过http请求访问它。 - DaveH
1
getEntity() 然后进行类型转换。 - Paul Samsotha
1个回答

4

org.glassfish.jersey.message.internal.OutboundJaxrsResponse 类支持 getEntity() 方法。

如何将响应内容作为 Java 字符串获取。从此处,您可以确定如何按 Json 或 XML 读取它....

private String entity( Response response ) throws WebApplicationException, IOException
{
    ByteArrayOutputStream baos = new ByteArrayOutputStream();
    StreamingOutput output = (StreamingOutput) response.getEntity();
    output.write( baos );
    return baos.toString( "UTF-8" );
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接