我正在使用RestTemplate调用一个rest服务,它返回一个很大的csv文件.我使用了下面的代码.我正在try 将响应存储在文件中.

导入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: Could not extract response: no suitable HttpMessageConverter found for response type [class java.io.InputStream] and content type [text/csv]

根据我的理解,我们需要编写合适的消息转换器和添加/注册将REST模板.

How to write suitable converter to get the csv response and store in a file?

推荐答案

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

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"个依赖项

Java相关问答推荐

Java JAR环境(JRE)是否支持模块?

Listview—在Android Java中正确链接项目时出错

使用java访问具体子类特定方法的最佳方法是什么?

Java inline Double条件和值解装箱崩溃

使用意向过滤器从另一个应用程序启动服务

使用传递的参数构造异常的Mockito-doThrow(或thenThrow)

我无法获取我的Java Spring应用程序的Logback跟踪日志(log)输出

当涉及到泛型时,类型推理在Java中是如何工作的?

在Java中,如何按一个属性升序,然后按另一个属性降序对对象列表进行排序?

尽管通过中断请求线程死亡,但线程仍将继续存在

在向WebSphere中的文档添加元素时iText挂起

为什么同步数据块无效?

允许同时执行两个方法,但不能同时执行这两个方法

Spring动态反序列化JSON可以是列表,也可以只是一个对象

无法将GSON导入到我的JavaFX Maven项目

try 使用预准备语句占位符获取信息时出现Try-With-Resources错误

从泛型枚举创建EnumMap

如何制作回文程序?

活泼的一次判断成语,结果中等

升级版本后出现非法访问错误