【发布时间】:2021-12-14 16:17:25
【问题描述】:
我使用 Java 在 Spring Boot 应用程序中实现了 zip 下载方法。我尝试了几种不同的解决方案,但仍然收到:使用 try-with-resources 或在来自 Sonar 的“finally”子句错误中关闭此“ZipOutputStream”。
在这里你可以找到我在服务中的实现。如果你能指导我解决这个问题,我会很高兴!
@Override
public void downloadZipBySeasonId(int seasonId, HttpServletResponse response) throws IOException {
.
.
.
if(!items.isEmpty()) {
ZipOutputStream zipOut = null;
try {
zipOut = new ZipOutputStream(response.getOutputStream()); // Sonar points this line!
for (int i = 1; i <= items.size(); i++) {
LetterEntity letter = items.get(i - 1);
ZipEntry zipEntry = new ZipEntry(letter.getLetterName());
zipOut.putNextEntry(zipEntry);
StreamUtils.copy(letter.getLetterContent(), zipOut);
zipOut.closeEntry();
}
}
catch (IOException e) {
e.printStackTrace();
throw new IllegalArgumentException("Could not zip succesfully!");
}
finally {
if(zipOut != null) {
zipOut.finish();
zipOut.close();
}
}
response.setStatus(HttpServletResponse.SC_OK);
response.addHeader(HttpHeaders.CONTENT_DISPOSITION, "attachment; filename=\"" + zipFileName + "\"");
} else {
response.setStatus(HttpServletResponse.SC_NO_CONTENT);
}
}
【问题讨论】:
-
你知道为什么 try-with-resources 是个好主意吗?
标签: java spring spring-boot sonarqube sonarqube-scan