无论是图片、pdf还是word文档,都可以用Spring的RestTemplate下载文件
根据springboot教程并从spring initializer website创建项目,我们将选择web并生成项目。下载项目后,我们将其导入到eclipse中,对依赖项没有进一步的要求。
我们展示了如何使用RestTemplate发出REST请求并检索JSON,通过一点配置,您可以通过编程下载pdf、image(svg、png、gif)或word文档。默认情况下,当RestTemplate
初始化时,它会配置一组默认的HttpMessageConverter
。如果您不熟悉HttpMessageConverter
,它是一种带有实现类的策略,可帮助处理各种类型的HTTP请求和响应。由于文件是二进制的,我们需要一个特定的转换器ByteArrayHttpMessageConverter
来转换请求文件。
public RestTemplate() {
this.messageConverters.add(new ByteArrayHttpMessageConverter());
this.messageConverters.add(new StringHttpMessageConverter());
this.messageConverters.add(new ResourceHttpMessageConverter());
this.messageConverters.add(new SourceHttpMessageConverter<Source>());
this.messageConverters.add(new AllEncompassingFormHttpMessageConverter());
//...
}
List<HttpMessageConverter<?>> messageConverters = new ArrayList<HttpMessageConverter<?>>();
messageConverters.add(new ByteArrayHttpMessageConverter());
RestTemplate restTemplate = new RestTemplate(messageConverters);
无论是依赖默认配置还是设置自定义消息转换器,我们都需要将一个空的HttpHeaders
传递给HttpEntity
。一旦设置完成,就可以调用restTemplate.exchange
了。需要指定一些参数。首先是文件的位置,在这种情况下,我们将请求谷歌的主页徽标。接下来是应该生成的HTTP request类型和HttpEnity
。最后,spring需要知道响应应该转换为什么类型的类。因为我们处理的是二进制文件,所以请求的返回类型是字节数组。
设置完成并发出请求后,我们希望确保已成功响应或向程序通知错误。为此,我们将检查HTTP status code并验证它是否正常或200。如果成功,我们将使用java7将文件写入根目录。让我们运行单元测试并验证文件是否会写入项目文件夹根目录。
@Test
public void fetchFile() throws IOException {
RestTemplate restTemplate = new RestTemplate();
restTemplate.getMessageConverters().add(
new ByteArrayHttpMessageConverter());
HttpHeaders headers = new HttpHeaders();
headers.setAccept(Arrays.asList(MediaType.APPLICATION_OCTET_STREAM));
HttpEntity<String> entity = new HttpEntity<String>(headers);
ResponseEntity<byte[]> response = restTemplate.exchange(
"https://www.google.com/assets/images/srpr/logo11w.png",
HttpMethod.GET, entity, byte[].class, "1");
if (response.getStatusCode() == HttpStatus.OK) {
Files.write(Paths.get("google.png"), response.getBody());
}
}
请记住,在处理文件时,您需要了解文件大小,因为它可能会影响请求的性能。文件越大,处理请求的时间越长。如果处理需要很长时间,您可能需要考虑异步java请求。
版权说明 : 本文为转载文章, 版权归原作者所有 版权申明
原文链接 : http://www.leveluplunch.com/java/tutorials/038-retrieve-file-spring-resttemplate/
内容来源于网络,如有侵权,请联系作者删除!