【发布时间】:2015-09-28 12:52:50
【问题描述】:
我正在测试 REST API,当我进行 GET 调用以检索资源时,它会导致 500 Internal Server Error 并在输出中返回具有媒体类型 application/json 的消息:
[
{
"messageType": "Some error type",
"messageText": "Some message text",
"moreInfo": "Some info"
}
]
请注意,在上面的输出中,Json 在 []
我想从上面的输出响应中读取messageText 的值。我试过 -
JsonObject jsonObject = response.readEntity(JsonObject.class);
但它会导致以下错误:
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)
能否请您帮我如何阅读输出中的消息?我正在使用 Jersy 库。
【问题讨论】:
-
您能否提供一些额外的代码。正如消息所暗示的那样,输入流似乎在之前的某个时间点已经关闭,并且无法再读取。
-
@peeskillet,我正在自动化这个测试而不是手动检查。我可以在 POSTMAN google chrome plugin for REST API testing 中手动查看。
-
很难说没有可重现的东西。我会查看Jersey Test Framework。在处理泽西岛时,放置可重现的all into one class 是最好的MCVE。我强烈建议这样做以获得更好的帮助。您甚至可以在分解问题时自己找出问题。
标签: java json jersey jersey-client