没有找到适合响应类型 [class java.io.InputStream] 和内容类型 [text/csv] 的 HttpMessageConverter

问题描述 投票:0回答:1

我正在使用 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 响应并存储在文件中?

java spring spring-boot spring-mvc java-io
1个回答
0
投票

您可以通过以下过程下载大文件:

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” 依赖项

© www.soinside.com 2019 - 2024. All rights reserved.