java springboot 怎么实现同时返回json对象及文件流
时间: 2024-01-23 16:02:24 浏览: 392
在Java Spring Boot中,你可以使用ResponseEntity类来同时返回JSON对象和文件流。以下是一个示例代码:
```java
@GetMapping("/download")
public ResponseEntity<?> download() throws IOException {
// 读取文件
File file = new File("path/to/file");
FileInputStream fileInputStream = new FileInputStream(file);
// 构造响应头
HttpHeaders headers = new HttpHeaders();
headers.add(HttpHeaders.CONTENT_DISPOSITION, "attachment; filename=file.txt");
// 构造JSON对象
JSONObject jsonObject = new JSONObject();
jsonObject.put("message", "File downloaded successfully");
// 返回ResponseEntity
return ResponseEntity.ok()
.headers(headers)
.contentType(MediaType.APPLICATION_OCTET_STREAM)
.body(new InputStreamResource(fileInputStream), jsonObject.toMap());
}
```
在这个示例中,我们首先读取文件并构造文件流,然后构造响应头,添加文件下载的Content-Disposition头。接下来,我们构造一个JSON对象作为响应体的一部分。最后,我们使用ResponseEntity类将文件流和JSON对象一起返回。
值得注意的是,我们在调用ResponseEntity.ok()方法时,使用了一个可选的body参数,用来传递JSON对象。这个body参数可以接收任何类型的对象,因此我们可以使用Map、List等数据类型来传递更复杂的JSON对象。
阅读全文