TDH*_*DHM 7 java json jersey jersey-client
我正在测试REST API,当我进行GET调用以检索资源时,它导致500内部服务器错误,并且在输出中它返回具有媒体类型的消息application/json:
[
{
"messageType": "Some error type",
"messageText": "Some message text",
"moreInfo": "Some info"
}
]
Run Code Online (Sandbox Code Playgroud)
请注意,在上面的输出中,Json在里面 []
我想messageText从上面的输出响应中读取值.我尝试过 -
JsonObject jsonObject = response.readEntity(JsonObject.class);
Run Code Online (Sandbox Code Playgroud)
但它会导致以下错误:
java.lang.IllegalStateException: Entity input stream has already been closed.
at org.glassfish.jersey.message.internal.EntityInputStream.ensureNotClosed(EntityInputStream.java:225)
at org.glassfish.jersey.message.internal.InboundMessageContext.readEntity(InboundMessageContext.java:830)
at org.glassfish.jersey.message.internal.InboundMessageContext.readEntity(InboundMessageContext.java:783)
at org.glassfish.jersey.client.ClientResponse.readEntity(ClientResponse.java:326)
at org.glassfish.jersey.client.InboundJaxrsResponse$1.call(InboundJaxrsResponse.java:111)
at org.glassfish.jersey.internal.Errors.process(Errors.java:315)
at org.glassfish.jersey.internal.Errors.process(Errors.java:297)
at org.glassfish.jersey.internal.Errors.process(Errors.java:228)
at org.glassfish.jersey.process.internal.RequestScope.runInScope(RequestScope.java:399)
at org.glassfish.jersey.client.InboundJaxrsResponse.readEntity(InboundJaxrsResponse.java:108)
Run Code Online (Sandbox Code Playgroud)
你能帮我解决一下我如何阅读输出中的信息?我正在使用Jersy库.
Tam*_*viv 15
我正在为我的Jersey服务编写自动化测试,它返回XML对象,我偶尔也会遇到这个错误.
根据javaDoc,对readEntity的调用会关闭响应实体,因此当您进行另一个readEntity调用时,会收到IllegalStateException.
除非提供的实体类型是输入流,否则此方法会在打开时自动关闭未使用的原始响应实体数据流.
在我的例子中,response.readEntity(String.class)
当我在Debug模式下运行代码时,在Debug透视图的Expressions窗格中使用表达式会导致此异常.对表达式的评估消耗了实体并使其关闭.