我正在使用 RestTemplate 调用 Rest 服务,该服务返回大小很大的 csv 文件。我使用了下面的代码。我正在尝试将响应存储在文件中。
导入java.nio.file.Files; 导入java.nio.file.Path;
String fileName = "response.csv";
File file = new File(fileName);
Path filePath = file.toPath();
HttpEntity<Object> requestEntity = new HttpEntity<>(null, headers);
RestTemplate restTemplate = new RestTemplate();
InputStream responseStream = restTemplate
.exchange(serviceURL/LogFile"), HttpMethod.GET, requestEntity, InputStream.class).getBody();
try {
Files.copy(responseStream, filePath, StandardCopyOption.REPLACE_EXISTING);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
我遇到了这个异常。
RestClientException:无法提取响应:找不到适合响应类型 [class java.io.InputStream] 和内容类型 [text/csv] 的合适 HttpMessageConverter
根据我的理解,我们需要编写合适的消息转换器并添加/注册将休息模板。
如何编写合适的转换器来获取 csv 响应并存储在文件中?
您可以通过以下过程下载大文件:
RestTemplate restTemplate = new RestTemplate();
String FILE_URL = "serviceURL/LogFile";
File file = restTemplate.execute(FILE_URL, HttpMethod.GET, null, clientHttpResponse -> {
File ret = File.createTempFile("download", ".csv");
StreamUtils.copy(clientHttpResponse.getBody(), new FileOutputStream(ret));
return ret;
});
String fileName = "response.csv";
File destFile = new File(fileName);
FileUtils.copyFile(file, destFile);
对于 FileUtils,您需要添加 “commons-io:commons-io:2.15.1” 依赖项