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
}