Spring BootのRestTemplateでバイナリデータを取得する
RestTemplate
Spring BootのAPI処理クラスと思われる
動作用API
LINE APIのGet ContentAPIを使用
https://devdocs.line.me/ja/?shell#get-content
実装サンプル
pom.xml
<!-- https://mvnrepository.com/artifact/org.apache.commons/commons-io --> <dependency> <groupId>org.apache.commons</groupId> <artifactId>commons-io</artifactId> <version>1.3.2</version> </dependency>
App
** RestTemplate Spring BootのAPI処理クラスと思われる ** 実装サンプル *** App >|java| package com.example; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.util.Arrays; import org.apache.commons.io.IOUtils; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.http.HttpEntity; import org.springframework.http.HttpHeaders; import org.springframework.http.HttpMethod; import org.springframework.http.HttpStatus; import org.springframework.http.MediaType; import org.springframework.http.ResponseEntity; import org.springframework.http.converter.ByteArrayHttpMessageConverter; import org.springframework.web.client.RestTemplate; @SpringBootApplication public class SampleSpringResttemplate01Application { public static void main(String[] args) throws IOException { SpringApplication.run(SampleSpringResttemplate01Application.class, args); // インスタンス生成 RestTemplate restTemplate = new RestTemplate(); // メッセージコンバーター設定 restTemplate.getMessageConverters().add(new ByteArrayHttpMessageConverter()); // ヘッダー設定 HttpHeaders headers = new HttpHeaders(); headers.setAccept(Arrays.asList(MediaType.APPLICATION_OCTET_STREAM)); headers.add("Authorization", "Bearer " + "アクセストークン"); // パラメータ設定 HttpEntity<String> entity = new HttpEntity<String>(headers); // URL String url; url = "https://api.line.me/v2/bot/message/999999999999999/content"; // リクエスト発行 ResponseEntity<byte[]> response = restTemplate.exchange(url, HttpMethod.GET, entity, byte[].class, "1"); // 戻り値よりチェック if(response.getStatusCode().equals(HttpStatus.OK)) { FileOutputStream output = new FileOutputStream(new File("filename.jpg")); IOUtils.write(response.getBody(), output); } } }
参考
java - Basic authentication for REST API using spring restTemplate - Stack Overflow
Read file/banary stream from the output of Spring resttemplate – TechTalk
所感
パッケージだけの場合はどのクラスかわかりにくいので動かすのがちょっと手間取ります。まあ、サンプルとして参考にさせていただいているのでわがままはいえませんけどw