在 Java 中禁止显示运行时控制台警告的最佳方法是什么?

我正在使用 org.apache.commons.httpclient.methods.PostMethod 类的 getResponseBody() 方法。但是,我总是在运行时收到一条写入控制台的消息:

警告:正在缓冲大小较大或未知的响应正文。建议改用 getResponseBodyAsStream。

在代码中,无论如何我都必须将响应写入字节数组,因此我应该使用getResponseBody()方法。但是,有没有一种简单的方法可以抑制警告消息,这样我就不必在每次运行时都查看它?

如果是编译器错误,我会使用@SuppressWarnings注释,但这不是编译时的问题;它发生在运行时。另外,我可以使用getResponseBodyAsStream写入ByteArrayOutputStream,但这似乎是一种绕过警告的黑客方式(额外的代码行来执行getResponseBody()已经为我做的事)。

我的猜测是答案涉及System.out或System.err操作,但是有好的方法可以做到这一点吗?


答案 1

如果要完全停止此日志条目,则有一个可触发警告的可调最大值。我在代码中看到了这一点。

        int limit = getParams().getIntParameter(HttpMethodParams.BUFFER_WARN_TRIGGER_LIMIT, 1024*1024);
        if ((contentLength == -1) || (contentLength > limit)) {
            LOG.warn("Going to buffer response body of large or unknown size. "
                    +"Using getResponseBodyAsStream instead is recommended.");
        }

HttpMethodBase.setParams() 看起来像是将HttpMethodParams.BUFFER_WARN_TRIGGER_LIMIT设置为所需值的地方。


答案 2

当 httpClient 不知道您应该在服务器端设置 content-length 属性的返回数据的长度时,就会发生警告

response.addHeader("Content-Type", "text/html; charset=utf-8");
response.addHeader("Content-Length", String.valueOf(output.getBytes("utf8").length));

在那之后,这个警告应该消失


推荐