泽西:错误跟踪:java。lang.IllegalStateException:实体输入流已关闭
我和泽西2号一起工作。十,
下面是我的控制器
@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.
我在这里做错了什么。 如果有人能解释我的这种行为,我将不胜感激
# 1 楼答案
我有一个类似的需求,我解决这个问题的方法是在Apache Commons的IOUtils的帮助下“克隆”请求实体,如下面的代码片段: