Java spring HandlerInterceptorAdapter postHandle中的日志响应内容

Java spring HandlerInterceptorAdapter postHandle中的日志响应内容,java,spring,Java,Spring,我已经实现了下面的方法来记录响应,但它在IOUtils.toStringresponseWrapper.getContentInputStream,UTF-8处抛出异常;表示响应的字节数为零。我可以访问标题和状态。我怎样才能得到响应体 @Override public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView

我已经实现了下面的方法来记录响应,但它在IOUtils.toStringresponseWrapper.getContentInputStream,UTF-8处抛出异常;表示响应的字节数为零。我可以访问标题和状态。我怎样才能得到响应体

    @Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler,
        ModelAndView modelAndView) throws Exception {
    System.out.println("after Request");
    ObjectMapper objectMapper = new ObjectMapper();

    ContentCachingResponseWrapper responseWrapper = new ContentCachingResponseWrapper(response);
    HttpStatus responseStatus = HttpStatus.valueOf(responseWrapper.getStatusCode());
    System.out.println(responseWrapper.getStatusCode());
    HttpHeaders responseHeaders = new HttpHeaders();
    for (String headerName : responseWrapper.getHeaderNames()) {
        System.out.println(headerName);
      responseHeaders.add(headerName, responseWrapper.getHeader(headerName));
    }
    String responseBody = IOUtils.toString(responseWrapper.getContentInputStream(), "UTF-8");
    System.out.println(responseBody);
    log.info("Response body {} ",responseBody);
    responseWrapper.copyBodyToResponse();
    }
我有你的答案。获取响应输出流不起作用的原因是,在生成输出时,输出流会定期写入和刷新。这意味着当您试图在最后获取它时,您只有一个空输出。或者,如果您在开始时捕获它,这只意味着您对outputstream的消费拒绝了对客户端的相同消费。这就是为什么您必须按照上面的答案复制它。

您从未使用response.getOutputStream或response.getWriter,因此没有数据添加到响应中。这就是为什么它是空的

您创建的实体

 ResponseEntity<JsonNode> responseEntity = new ResponseEntity<>(responseJson,responseHeaders,responseStatus);

然后检查主体。

我的rest api返回return new responseEntityStatus response,HttpStatus.OK;这是因为我无法获得响应。据我所知,它没有返回任何内容-无效我正在设置此对象StatusResponse StatusResponse=new StatusResponse;statusResponse.setDataVersionNumber4;statusResponse.setModuleIdcalc;我没有看到张贴的代码。所以你的代码实际上是不同的,我们应该猜测我们没有看到的代码有什么问题。可能是。。。。嗯。。。困难海绵体是空的。而API调用的输出是{moduleId:calc,dataversion:4}这是关于过滤器的,但我使用的是spring HandlerInterceptorAdapter。同样的推理也适用。这里的关键点是,您无法访问处理响应的outputstream。你需要复制它。
responseWrapper.getWriter().write("test");