问题 Spring 3错误消息的含义和解决方案? “建议使用getResponseBodyAsStream”


我正在使用Spring 3,每次我向Spring控制器提交HTML表单时都会收到此消息,我不明白:

org.apache.commons.httpclient.HttpMethodBase getResponseBody
WARNING: Going to buffer response body of large or unknown size. 
Using getResponseBodyAsStream instead is recommended.

我是否可以在Spring中进行配置更改以避免这种情况?


3686
2017-09-14 22:35


起源



答案:


当使用getResponseBody()方法时,使用commons-httpclient API会发生这种情况。警告意味着响应主体可能非常大(例如大文件下载等)并且将整个内容一次加载到内存中作为String可能效率非常低。避免这种潜在的低效率的方法是使用getResponseBodyAsStream(),这将允许适当的缓冲和响应体的流式传输。

我不确定Spring为什么使用getResponseBody()。它可能是你的HTTP客户端吗?您是否使用自定义编写的HTTP客户端来执行请求?


15
2017-09-14 22:54



我不确定“自定义编写的HTTP客户端”是什么意思。我在服务器端使用Spring / Jetty,在客户端使用Firefox。 - Linc
例如,我认为您可能在单元测试中使用自己的HTTP客户端。由于您正在使用Firefox,因此Spring可能会使用getResponseBody()来触发警告。如果是这样的话,我不会太担心它。您可以更改log4j配置以禁止警告,如果它困扰您,但它不太可能是警报的原因。 - earldouglas


答案:


当使用getResponseBody()方法时,使用commons-httpclient API会发生这种情况。警告意味着响应主体可能非常大(例如大文件下载等)并且将整个内容一次加载到内存中作为String可能效率非常低。避免这种潜在的低效率的方法是使用getResponseBodyAsStream(),这将允许适当的缓冲和响应体的流式传输。

我不确定Spring为什么使用getResponseBody()。它可能是你的HTTP客户端吗?您是否使用自定义编写的HTTP客户端来执行请求?


15
2017-09-14 22:54



我不确定“自定义编写的HTTP客户端”是什么意思。我在服务器端使用Spring / Jetty,在客户端使用Firefox。 - Linc
例如,我认为您可能在单元测试中使用自己的HTTP客户端。由于您正在使用Firefox,因此Spring可能会使用getResponseBody()来触发警告。如果是这样的话,我不会太担心它。您可以更改log4j配置以禁止警告,如果它困扰您,但它不太可能是警报的原因。 - earldouglas


您可以添加配置 http.method.response.buffer.warnlimit=1024*1024*10 在application.properties中。这个对我有用。


1
2017-10-18 02:23