我使用IOUtils
从HttpServletRequest 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
很可能在每次调用getInputStream
时返回一个新的输入流,因此关闭一个新的输入流并没有帮助。
将输入流保存在一个变量中。最好使用try-with-resources:
try (InputStream stream = request.getInputStream()) {
data = IOUtils.toString(stream, "UTF-8");
}