如何在 Spring Boot 中实现部分 GET 请求?

Posted

技术标签:

【中文标题】如何在 Spring Boot 中实现部分 GET 请求?【英文标题】:How to implement partial GET requests in Spring Boot? 【发布时间】:2021-09-19 18:47:58 【问题描述】:

我正在尝试实现一个控制器,该控制器将接受请求标头中的字节范围,然后将多媒体作为字节数组返回。返回文件时,默认启用部分请求。

这行得通。当提到字节范围时,返回 206 和文件的一部分。如果没有提到字节范围,则为 200(和整个文件)。

@RequestMapping("/stream/file")
public ResponseEntity<FileSystemResource> streamFile() 
    File file = new File("/path/to/local/file");
    return ResponseEntity.ok().body(new FileSystemResource(file));

这不起作用。无论我是否在请求标头中提及字节范围,它都会返回 200。

@RequestMapping("/stream/byte")
public ResponseEntity<byte[]> streamBytes() throws IOException 
    File file = new File("path/to/local/file");
    byte[] fileContent = Files.readAllBytes(file.toPath());
    return ResponseEntity.ok().body(fileContent);

【问题讨论】:

【参考方案1】:

返回一个状态码为 206 的 ResponseEntity。

Here is the HTTP Status Code for 206 in Spring Boot.

就这样吧。

@RequestMapping("/stream/byte")
public ResponseEntity<byte[]> streamBytes() throws IOException 
    File file = new File("path/to/local/file");
    byte[] fileContent = Files.readAllBytes(file.toPath());
    int numBytes = /** fetch your number of bytes from the header */;
    return ResponseEntity.status(HttpStatus.PARTIAL_CONTENT).body(Arrays.copyOfRange(fileContent, 0, numBytes));

【讨论】:

但它返回整个对象。除了 206 代码,我还希望它部分返回对象。 部分返回对象是什么意思? 我在我的请求标头上指定了 0-500 个字节。我希望只返回文件的一部分。不是整个文件。 啊,我明白了。我已经修复了我的解决方案来反映这一点。让我知道这是否正确。 必需的类型是 ResponseEntity 但我提供的是 BodyBuilder

以上是关于如何在 Spring Boot 中实现部分 GET 请求?的主要内容,如果未能解决你的问题,请参考以下文章

spring boot中实现响应图片的方法以及改进

如何在 Spring Boot 中实现基于角色权限的系统

如何在 Spring Boot 中实现 Camunda SendTask

如何在spring boot中实现jms队列

如何使用hibernate在spring boot中实现分页

如何在 Spring Boot 应用程序中实现长轮询 REST 端点?