ДЖЕРСИ: Трассировка ошибок: java.lang.IllegalStateException: поток ввода объекта уже закрытJAVA

Программисты JAVA общаются здесь
Anonymous
ДЖЕРСИ: Трассировка ошибок: java.lang.IllegalStateException: поток ввода объекта уже закрыт

Сообщение Anonymous »

Я работаю с Jersey 2.x.

Ниже приведен мой контроллер

Код: Выделить всё

@GET
@Path("{id}")
@Produces("application/json")
public Response getUser(@PathParam("id") int userId, @Context ContainerRequestContext containerRequestContext) {

ContainerRequestContext requestContext = logRequest(containerRequestContext);

//To further operations using requestContext

}
Ниже приведен мой метод внутри того же класса контроллера для записи запроса.

Код: Выделить всё

private ContainerRequestContext logRequest(ContainerRequestContext requestContext) {

JSONObject requestData = new JSONObject();
try {

Map bm = null;
ContainerRequest cr = (ContainerRequest) requestContext;

cr.bufferEntity();

bm = cr.readEntity(Map.class);

if (!String.valueOf(bm).equalsIgnoreCase("null")) {
requestData.put("parameters", bm.toString());
}

requestData.put("uri", requestContext.getUriInfo().getRequestUri());
requestData.put("ClientIp", requestContext.getProperty("requesterIp"));
requestContext.setProperty("requestData", requestData);

} catch (IOException | NumberFormatException | ProcessingException ex) {
//Logging

} catch (Exception ex) {
//Logging
}
return requestContext;
}
Как вы можете видеть, я использую bufferEntity() для чтения ContainerRequestContext несколько раз.

Тем не менее, когда я развертываю свой API на своем сервере.

Я сталкиваюсь с этой ошибкой:

Код: Выделить всё

Error Trace : java.lang.IllegalStateException: Entity input stream has already been closed.
Что я здесь делаю не так.
Я буду благодарен, если кто-нибудь объяснит мне такое поведение.

Вернуться в «JAVA»