我正在尝试从服务器下载ZipFile。这将是一个REST调用。 REST调用的响应是ZipFile。现在执行以下代码我得到以下错误 -
Exception in thread "main" org.springframework.web.client.RestClientException: Could not extract response: no suitable HttpMessageConverter found for response type [java.util.zip.ZipFile] and content type [application/zip]
at org.springframework.web.client.HttpMessageConverterExtractor.extractData(HttpMessageConverterExtractor.java:77)
at org.springframework.web.client.RestTemplate$ResponseEntityResponseExtractor.extractData(RestTemplate.java:619)
at org.springframework.web.client.RestTemplate$ResponseEntityResponseExtractor.extractData(RestTemplate.java:1)
at org.springframework.web.client.RestTemplate.doExecute(RestTemplate.java:446)
at org.springframework.web.client.RestTemplate.execute(RestTemplate.java:401)
at org.springframework.web.client.RestTemplate.exchange(RestTemplate.java:377)
at com.i3l.finnair.bpm.common.qualtrics.helper.QualtricsAPIHelper.qualtricsResponseExportFile(QualtricsAPIHelper.java:262)
at com.i3l.finnair.css.surveyresults.test.QualtricsTest.processCustomerSurveyResponse(QualtricsTest.java:121)
at com.i3l.finnair.css.surveyresults.test.QualtricsTest.main(QualtricsTest.java:28)
我的休息电话如下 -
public static ZipFile qualtricsResponseExportFile(String surveyExportRespId, String _apiToken){
String restUrl = "https://eu.qualtrics.com/API/v3/responseexports/{surveyExportRespId}/file";
HttpHeaders headers = getRESTHeader(_apiToken);
RestTemplate restTemplate = getRestTemplateWithJsonConverter();
HttpEntity httpEntity = new HttpEntity(headers);
ResponseEntity<ZipFile> response = restTemplate
.exchange(restUrl, HttpMethod.GET, httpEntity,
ZipFile.class, surveyExportRespId);
ZipFile responseFile = response.getBody();
return responseFile;
}
我的restHeader如下 -
private static HttpHeaders getRESTHeader(String _apiToken) {
HttpHeaders headers = new HttpHeaders();
headers.add("X-API-TOKEN", _apiToken);
headers.setAccept(Arrays.asList(MediaType.APPLICATION_JSON));
headers.setContentType(MediaType.APPLICATION_JSON);
return headers;
}
我的RestConverter如下 -
private static RestTemplate getRestTemplateWithJsonConverter() {
RestTemplate restTemplate = new RestTemplate();
// Create a list for the message converters
List<HttpMessageConverter<?>> messageConverters = new ArrayList<HttpMessageConverter<?>>();
// Add the Jackson Mapping JSON Message converter
messageConverters.add(new MappingJacksonHttpMessageConverter());
// Add the message converters to the restTemplate
restTemplate.setMessageConverters(messageConverters);
return restTemplate;
}
答案 0 :(得分:0)
我有同样的问题。本文对我有帮助:https://www.leveluplunch.com/java/tutorials/038-retrieve-file-spring-resttemplate/
首先,您必须设置请求标头以接受所有类型的响应。
requestHeaders.setAccept(Arrays.asList(MediaType.ALL));
此后,将ByteArrayHttpMessageConverter添加到您的消息转换器中。
messageConverters.add(new ByteArrayHttpMessageConverter());
最后,以字节数组的形式检索文件,并将其包装到ResponseEntity中。
ResponseEntity<byte[]> response = restTemplate
.exchange(restUrl, HttpMethod.GET, httpEntity,
byte[].class, surveyExportRespId);
字节数组可以另存为文件,或反序列化ZipFile实体。