执行RestTemplate调用时,类型为zipFile的HttpMessageConverter

时间:2017-12-04 13:00:13

标签: resttemplate zipfile

我正在尝试从服务器下载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;
}

1 个答案:

答案 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实体。