簡體   English   中英

使用 restTemplate 下載內容類型八位字節流的文件

[英]Download file of content-type octet-stream using restTemplate

在我的應用程序中,我收到來自 API 響應的文件,其Content-Typeapplication/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]

通過瀏覽一些文檔,我想到了使用與RestTemplate.getForEntity相同的responseEntityExtractor

我的代碼:

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>>

我錯過了什么?

代替:

ResponseExtractor<ResponseEntity<Resource>> responseExtractor = template.responseEntityExtractor(ResponseEntity.class);

試試這個在 controller 方法中返回byte[]

ResponseExtractor<ResponseEntity<byte[]>> responseExtractor = template.responseEntityExtractor(byte[].class);
ResponseEntity<byte[]> results = template.responseEntityExtractor(byte[].class);
return results.getBody();

或返回ResponseEntity<Resource>

ResponseExtractor<ResponseEntity<byte[]>> responseExtractor = template.responseEntityExtractor(byte[].class);
ResponseEntity<byte[]> results = template.responseEntityExtractor(byte[].class);

ByteArrayResource byteArrayResource = new ByteArrayResource(results.getBody());
return new ResponseEntity<Resource>(byteArrayResource, null, HttpStatus.OK);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM