ResponseEntity 不接受 return 类型 "byte[]" 但 "ResponseEntity"
ResponseEntity does not accept return type "byte[]" but "ResponseEntity"
我正在尝试通过 REST 端点将数据从一台服务器发送到另一台服务器:
服务器 B 启动此请求:
String resource = "http://...";
ResponseEntity<byte[]> response = restTemplate.getForObject(resource, byte[].class, customerID);
服务器 A 收到请求和 returns 文件:
ResponseEntity<byte[]> resp = new ResponseEntity<byte[]>(myByteArrayOutputStream.toByteArray(), HttpStatus.OK);
return resp;
但是我在 .getForObject 行收到一个错误:
Required Type: ResponseEntity[]
Provided: byte[]
所以显然我必须将语句更改为:
byte[] response = restTemplate.getForObject(resource, byte[].class, customerID);
或到
ResponseEntity<byte[]> response = restTemplate.getForObject(resource, ResponseEntity.class, customerID);
然后错误消失了,但我在响应中丢失了 HttpStatus.Ok 消息?这里的正确解决方案是什么?
是的,getForObject
方法不提供对响应元数据(如 headers 和状态代码)的访问。如果您必须访问此数据,请使用 RestTemplate#getForEntity(url, responseType, uriVariables)
RestTemplate#getForEntity
returns 包装器 ResponseEntity<T>
因此您可以读取响应元数据并通过 getBody()
方法读取 body。
ResponseEntity<byte[]> response = restTemplate.getForEntity(resource, byte[].class, customerID);
if (response.getStatusCode() == HttpStatus.OK) {
byte[] responseContent = response.getBody();
// ...
} else {
// this is not very useful because for error codes (4xx and 5xx) the RestTemplate throws an Exception
}
我正在尝试通过 REST 端点将数据从一台服务器发送到另一台服务器:
服务器 B 启动此请求:
String resource = "http://...";
ResponseEntity<byte[]> response = restTemplate.getForObject(resource, byte[].class, customerID);
服务器 A 收到请求和 returns 文件:
ResponseEntity<byte[]> resp = new ResponseEntity<byte[]>(myByteArrayOutputStream.toByteArray(), HttpStatus.OK);
return resp;
但是我在 .getForObject 行收到一个错误:
Required Type: ResponseEntity[]
Provided: byte[]
所以显然我必须将语句更改为:
byte[] response = restTemplate.getForObject(resource, byte[].class, customerID);
或到
ResponseEntity<byte[]> response = restTemplate.getForObject(resource, ResponseEntity.class, customerID);
然后错误消失了,但我在响应中丢失了 HttpStatus.Ok 消息?这里的正确解决方案是什么?
是的,getForObject
方法不提供对响应元数据(如 headers 和状态代码)的访问。如果您必须访问此数据,请使用 RestTemplate#getForEntity(url, responseType, uriVariables)
RestTemplate#getForEntity
returns 包装器 ResponseEntity<T>
因此您可以读取响应元数据并通过 getBody()
方法读取 body。
ResponseEntity<byte[]> response = restTemplate.getForEntity(resource, byte[].class, customerID);
if (response.getStatusCode() == HttpStatus.OK) {
byte[] responseContent = response.getBody();
// ...
} else {
// this is not very useful because for error codes (4xx and 5xx) the RestTemplate throws an Exception
}