gpt4 book ai didi

java - 如何在java spring REST上返回由对象包装的数组字节

转载 作者:行者123 更新时间:2023-12-02 09:14:53 26 4
gpt4 key购买 nike

我想在java spring Rest上返回对象内部的数组字节。

我预期的响应对象。

public class ResponseByteArray {
private String fileName;
private byte[] file;
public String getFileName() {
return fileName;
}
public void setFileName(String fileName) {
this.fileName = fileName;
}
public byte[] getFile() {
return file;
}
public void setFile(byte[] file) {
this.file = file;
}
}

@RequestMapping(value = "/getDataByte", method = RequestMethod.GET)
public ResponseEntity<?> uploadUImageGet() throws IOException {
ResponseByteArray response = new ResponseByteArray();
File fileImage = new File("D://images//download1.jpg");
byte[] fileContent = Files.readAllBytes(fileImage.toPath());
response.setFileName("testFile.jpg");
response.setFile(fileContent);
return new ResponseEntity<ResponseByteArray>(response, HttpStatus.OK);
}

但是我的rest API的响应是json格式,文件的值是字符串encodeBase64而不是byte[]。这个过程发生了什么? Rest不能返回byte[] inseide对象?:

{
"fileName": "testFile.jpg",
"file": "/9j/4AAQSkZJRgABAQAAAQABAAD/2wCEAAkGBxIQEg8PEhIPFRIPDw8QEA8QDw8PEBAPFREWFhUVFRUYHSggGBolHRUVITEhJSkrLi4uFx8zODMsNygtLisBCgoKDg0NFQ8PFSsdFR0tLS0tKysrKy0tKy0tNy03LS0rKy0tLSsrKzc3LS0rLSsrKy0rKzctLTcrLSstNy0tK//AABEIAQMAwgMBIgACEQEDEQH/xAAbAAABBQEBAAAAAAAAAAAAAAADAAECBAUGB//EAD8QAAIBAgMFBQUGBQIHAQAAAAECAAMRBCExBRJBUWEGMnGBkRMiUqHRFGJyscHwQpKisuEjkxUXM3OC0vEH/8QAGQEBAQEBAQEAAAAAAAAAAAAAAAECAwUE/8QAIBEBAQEAAwADAAMBAAAAAAAAABEBAgMSITFBEyJRB ...
}

最佳答案

如果您将 Rest 作为一种协议(protocol)进行讨论,那么它可以返回二进制流,从某种意义上说,HTTP 协议(protocol)可以处理二进制流。这是一个例子:


@GetMapping(value = "/images/{id}")
public ResponseEntity<byte[]> get(@PathVariable String id) {

HttpHeaders headers = new HttpHeaders();
headers.setContentType(MediaType.IMAGE_JPEG);
return new ResponseEntity<>(service.get(id), headers, HttpStatus.OK);
}

但是,如果您将 REST 视为返回 JSON/XML 的协议(protocol)(这是我在阅读您的问题时假设的),那么,从这个意义上说:REST 返回文本(而不是二进制)数据(因为您假设它)以 JSON 或 XML 的形式。

无论如何,如何将字节数组表示为文本数据?

一种方法是将其编码为字符串表示形式,这正是 Base64 编码的作用。

请注意,如果您检查字节数组的大小并将其与 Base64 编码创建的字符串的长度进行比较,您会发现 Base64 的开销相当大。

关于java - 如何在java spring REST上返回由对象包装的数组字节,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59082294/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com