在我的應用程式中,我從 API 回應中接收到一個檔案,該檔案Content-Type是application/octet-stream.
我正在嘗試將此檔案作為ResponseEntity<Resource>.
但我收到錯誤:
RestClientException: Could not extract response: no suitable HttpMessageConverter found for response type [class org.springframework.http.ResponseEntity] and content type [application/octet-stream]
通過瀏覽一些檔案,我想到了使用responseEntityExtractor與RestTemplate.getForEntity相同的檔案。
我的代碼:
RequestCallback requestCallback = request -> {
HttpHeaders headers1 = request
.getHeaders();
headers1.set("Authorization", "Bearer " template.getAccessToken());
headers1
.setAccept(Arrays.asList(MediaType.APPLICATION_OCTET_STREAM, MediaType.ALL));
};
ResponseExtractor<ResponseEntity<Resource>> responseExtractor = template.responseEntityExtractor(ResponseEntity.class);
template.execute(url, HttpMethod.GET, requestCallback, responseExtractor, uriVariables);
可以理解的是,通過setAccept在請求回呼中設定,我們讓我們restTemplate知道期望什么型別的內容,responseEntityExtractor()并將回傳ResponseExtractor<ResponseEntity<T>>。
我錯過了什么?
uj5u.com熱心網友回復:
代替:
ResponseExtractor<ResponseEntity<Resource>> responseExtractor = template.responseEntityExtractor(ResponseEntity.class);
試試這個byte[]在控制器方法中回傳:
ResponseExtractor<ResponseEntity<byte[]>> responseExtractor = template.responseEntityExtractor(byte[].class);
ResponseEntity<byte[]> results = template.execute(url, HttpMethod.GET, requestCallback, responseExtractor, uriVariables);
return results.getBody();
或者這個回傳ResponseEntity<Resource>:
ResponseExtractor<ResponseEntity<byte[]>> responseExtractor = template.responseEntityExtractor(byte[].class);
ResponseEntity<byte[]> results = template.execute(url, HttpMethod.GET, requestCallback, responseExtractor, uriVariables);
ByteArrayResource byteArrayResource = new ByteArrayResource(results.getBody());
return new ResponseEntity<Resource>(byteArrayResource, null, HttpStatus.OK);
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/406804.html
標籤:
上一篇:如何使用快速服務器鍵入請求引數
