在Java Spring中以REST方法返回后执行清理操作

时间:2018-07-12 03:26:40

标签: java spring rest spring-boot return

我想在创建zip文件后清理文件。这些操作之一是删除zip文件本身。

    @RequestMapping(path = "/downloadZip", method = RequestMethod.GET)
public ResponseEntity<Resource> download(String fileName) throws IOException {

//Create a zip file and add entries

    Path path = Paths.get(file.getAbsolutePath());
    ByteArrayResource resource = new ByteArrayResource(Files.readAllBytes(path));

    return ResponseEntity.ok()
            .headers(headers)
            .contentLength(file.length())
            .contentType(MediaType.parseMediaType("application/octet-stream"))
            .body(resource);

//Call a cleanup method
//cleanUp();

}

在Junit测试中,我能够使用静态方法 AfterClass 删除zip文件。

问题:如何定义返回后的方法。

谢谢!

1 个答案:

答案 0 :(得分:1)

首先,我建议您有一个无需编写文件的无状态Web应用程序。只需使用缓冲区即可。尤其是当您说必须随后清理文件时。

但是,如果您无法摆脱困境,并且仍然想在向用户返回某些东西后执行任务,那么您可以选择两种方法。您可以使用非常不错的Aspects,因此可以看一下AspectJ。否则,您还可以结合使用Futures@Async方法上的Controller注释。

您可以罚款,因为使用注释中建议的资源语法将阻止您的方法返回客户端调用,并且您必须确保处理异常,并且在发生某些错误时不会清除文件。 IMO,您会在使用这种方法时感到头疼,例如文件系统被填充。