无法在响应输出中读取application/json消息

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窗格中使用表达式会导致此异常.对表达式的评估消耗了实体并使其关闭.

  • 如果要多次调用 readEntity(...),可以使用 response.bufferEntity() (3认同)

Aur*_*ere 0

当您收到错误 500 时,您可能会在控制台/日志中收到另一个异常。您应该开始检查这一点,然后尝试解决这个问题。如果您在日志中找不到任何内容,可以发布更多代码吗?