代码之家  ›  专栏  ›  技术社区  ›  Ladu anand

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

  •  0
  • Ladu anand  · 技术社区  · 5 年前

    我正在尝试使用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);
            }
        }
    
    0 回复  |  直到 5 年前
        1
  •  1
  •   Ladu anand    5 年前

    我通过设置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));
            }