tutorial restful example java json jersey jersey-client

java - restful - No se puede leer el mensaje de aplicación/json en la salida de respuesta



jersey post java (2)

Estoy probando la API REST y mientras realizo la llamada GET para recuperar recursos, está resultando en 500 Internal Server Error y en la salida está devolviendo el mensaje que tiene el tipo de medio application/json :

[ { "messageType": "Some error type", "messageText": "Some message text", "moreInfo": "Some info" } ]

Tenga en cuenta que en la salida anterior, Json está dentro de []

Quiero leer el valor de messageText desde la respuesta de salida anterior. Intenté con -

JsonObject jsonObject = response.readEntity(JsonObject.class);

pero resulta en el siguiente error:

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)

¿Podrían por favor ayudarme cómo puedo leer el mensaje en la salida? Estoy usando la biblioteca de Jersy.


Cuando obtiene su error 500 probablemente obtenga otra excepción en la consola / registro. Debería comenzar a verificar eso y luego tratar de resolverlo. Si no encuentra nada en el registro, ¿podría publicar más código?


Estoy escribiendo pruebas automáticas para mis servicios de Jersey, que devuelven objetos XML, y también recibía este error ocasionalmente.

Según javaDoc , una llamada a readEntity cierra la entidad de respuesta, por lo que cuando haces otra llamada a readEntity obtienes IllegalStateException.

A menos que el tipo de entidad suministrado sea una corriente de entrada, este método cierra automáticamente la secuencia de datos de entidad de respuesta original no consumida si está abierta.

En mi caso, tener la expresión response.readEntity(String.class) en el panel de Expresiones en la perspectiva de Debug causó esta excepción cuando ejecuté el código en modo Debug. La evaluación de la expresión consumió a la entidad y causó que se cerrara.