IOUtils 的潜在资源泄漏像顽固的骡子一样持续存在

Potnetial Resource Leak with IOUtils Persists like a Stubborn Mule

我正在使用 IOUtilsHttpServletRequest request:

解析 JSON
baseRequest.setAuthentication(null);
    
response.setContentType("application/json");
response.setStatus(HttpServletResponse.SC_OK);
baseRequest.setHandled(true);   
    
PrintWriter writerResponse = response.getWriter();
    
    
-> String data = IOUtils.toString(request.getInputStream(), "UTF-8"); <-

但是 Eclipse 抱怨潜在的资源泄漏:

Potential resource leak: '<unassigned Closeable value>' may not be closed

即使我用 try/finally 块包围它并通过 IOUtils.closeQuietly() 关闭,错误仍然像顽固的骡子一样存在。

String data = "";
try {
    data = IOUtils.toString(request.getInputStream(), "UTF-8");
} catch (IOException e) {
       
} finally {
       IOUtils.closeQuietly(request.getInputStream());
}

是什么导致了这个错误,我该如何解决?

P.S

而下面的代码:

try {
    String data = IOUtils.toString(request.getInputStream(), "UTF-8");
} catch (IOException e) {
       
} finally {
       IOUtils.closeQuietly(request.getInputStream());
}

不会抛出任何错误,只要我尝试在我的代码中的任何地方使用值 'data'(甚至在 try 语句中),错误就会再次出现。

错误正确。 getInputStream 很可能 return 每次调用 getInputStream 时都会有一个 new 输入流,所以关闭新的输入流没有帮助。

将输入流保存在一个变量中。最重要的是,使用 try-with-resources:

try (InputStream stream = request.getInputStream()) {
  data = IOUtils.toString(stream, "UTF-8");
}