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

标签 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 文件。

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

谢谢!

最佳答案

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

但是,如果您无法摆脱这种情况,并且在将某些内容返回给用户后仍想执行任务,那么您有两种选择。您可以使用非常好的 Aspects,这样您就可以查看 AspectJ。否则,您还可以查看将 FuturesController 方法上的 @Async 注释结合使用。

您可能会觉得使用评论中建议的资源语法会阻止您的方法返回客户端调用,并且您必须确保处理异常,当发生某些错误时文件不会被清理。在我看来,使用这种方法您会遇到一些令人头疼的问题,例如您的文件系统被填满。

关于java - 在 Java Spring 的 REST 方法中返回后执行清理操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51296878/

相关文章:

javascript - HTTP 状态 400 : The requested resource is not available

java - Xodus VFS 无法保存字节

java - 将 null 分配给 Java 中的 ArrayList 项

java - 您可以通过 EventQueue 逐步更新 JPanel 吗?

java - 无法注入(inject) sessionFactory

rest - 如何从 Sharepoint Assets 库获取文件名

java - 如何覆盖 Http 中的 302 状态?

spring - Rest 自定义 HTTP 消息转换器 Spring Boot 1.2.3

java - 如何使用泛型初始化 ehCache 列表?

java - 如何保护用于服务器到服务器通信的 App Engine 端点?