Spring 引导防止出错时生成空文件

Spring Boot prevent empty file generation on error

我正在尝试使用 Spring Boot 从 JDBC 结果集中提取 Word 文档。一切正常,只是当出现错误时,我收到 500 错误和一个空文件。如何防止生成空文件。

@GetMapping(produces = "application/vnd.openxmlformats-officedocument.wordprocessingml.document", value = "export/word")
    @ApiOperation(value = "Export table as word")
    public void generateword(HttpServletResponse response, @RequestParam(required = true) String tableName,
            @RequestParam(required = false) String search, @RequestParam(required = false) String searchColumn,
            @RequestHeader(required = false, value = "x-remote-user") String username)
            throws DataAccessException, IOException {
        DateFormat dateFormatter = new SimpleDateFormat("yyyy-MM-dd_HH-mm-ss");
        String currentDateTime = dateFormatter.format(new Date());
        String headerKey = "Content-Disposition";
        String headerValue = "attachment; filename=" + tableName + "_" + currentDateTime + ".docx";
        response.setHeader(headerKey, headerValue);
        response.setContentType("application/vnd.openxmlformats-officedocument.wordprocessingml.document");
        if (StringUtils.hasLength(search)) {
            describeDatabaseRepository.generateWord(tableName, username, search, searchColumn, response);
        } else {
            describeDatabaseRepository.generateWord(tableName, username, response);
        }
    }

我通过放入 try catch 块解决了这个问题。

try {
            DateFormat dateFormatter = new SimpleDateFormat("yyyy-MM-dd_HH-mm-ss");
            String currentDateTime = dateFormatter.format(new Date());
            String headerKey = "Content-Disposition";
            String headerValue = "attachment; filename=" + tableName + "_" + currentDateTime + ".docx";
            response.setHeader(headerKey, headerValue);
            response.setContentType("application/vnd.openxmlformats-officedocument.wordprocessingml.document");
            if (StringUtils.hasLength(search)) {
                describeDatabaseRepository.generateWord(tableName, username, search, searchColumn, response);
            } else {
                describeDatabaseRepository.generateWord(tableName, username, response);
            }
        } catch (Exception e) {
            response.reset();
            response.setStatus(HttpStatus.INTERNAL_SERVER_ERROR.value());
            response.setContentType("application/json");
            response.setCharacterEncoding("UTF-8");
            ABCError err = new ABCError();
            err.setCode(HttpStatus.INTERNAL_SERVER_ERROR.value());
            err.setDevMessage(e.getMessage());
            err.setMessage("Something went wrong.Could not generate the file.");
            response.getWriter().write(objectMapper.writeValueAsString(err));
        }