【问题标题】:Filter response returning only part of the content过滤器响应只返回部分内容
【发布时间】:2019-03-04 11:10:12
【问题描述】:

我有以下方法可以提取响应并将其包装在包装类中。

使用调试器,我可以看到responseContent 具有应有的全部内容,但是当它打印到屏幕时,只有部分请求返回。

我可以看到变量data 具有应具有的全部值。

public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
    ContentCachingResponseWrapper responseWrapper = new ContentCachingResponseWrapper((HttpServletResponse) response);
    chain.doFilter(request, responseWrapper);
    String responseContent = new String(responseWrapper.getContentAsByteArray());
    BasicResponse<Object> fullResponse = new BasicResponse<>();
    fullResponse.setData(new ObjectMapper().readValue(responseContent, Object.class));
    String data = new ObjectMapper().writeValueAsString(fullResponse);
    response.getWriter().write(data);//data has the entire value
    response.getWriter().close();
}

【问题讨论】:

  • 会不会是在响应中设置了Content-Length 标头并且小于data 长度?
  • @KarolDowbecki 谢谢!由于我正在修改对象,因此保留了旧尺寸。如果您想获得奖励,请将其发布为答案。再次感谢

标签: java jakarta-ee filter


【解决方案1】:

很可能响应Content-Length 标头设置的值低于新数据长度。确保使用与新数据长度匹配的新值设置此标头。

【讨论】: