2017-06-20 46 views
0

我已經實現了以下方法,以測井響應,但將在IOUtils.toString異常(responseWrapper.getContentInputStream(),「UTF-8」);說響應有零字節。我能夠訪問標題和狀態。我怎樣才能得到響應體?在彈簧測井響應內容HandlerInterceptorAdapter的postHandle

@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(); 
    } 

回答

0

How to read and copy the HTTP servlet response output stream content for logging

有你的答案。獲取響應輸出流的原因不起作用,因爲在生成輸出時,輸出流會定期寫入並刷新。這意味着當你試圖在最後得到它時,你只需要一個空輸出。或者,如果您在開始時捕獲它,那隻意味着您對outputstream的使用會拒絕客戶端使用相同的消耗。這就是爲什麼你必須複製它在上面的答案。

+0

這是在談論過濾器,但我使用的春天HandlerInterceptorAdapter。 – user2478236

+0

同樣的推理適用。這裏的關鍵是您無法訪問處理響應的輸出流。你需要複製它。 –

0

你從來不會使用response.getOutputStream()response.getWriter()所以沒有數據被添加到響應。這就是爲什麼它是空的。

你創建的實體

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

從未使用過,從來沒有發送到響應。嘗試

responseWrapper.getWriter().write("test"); 

並檢查後的身體。

+0

我的REST API將返回返回新ResponseEntity (statusResponse,HttpStatus.OK);是因爲這個,我無法得到迴應。 – user2478236

+0

至於我可以看到它沒有返回 - 'void' – StanislavL

+0

我設置這個對象StatusResponse statusResponse =新StatusResponse(); statusResponse.setDataVersionNumber(「4」); statusResponse.setModuleId(「calc」); – user2478236