読者です 読者をやめる 読者になる 読者になる

m_shige1979のささやかな抵抗と欲望の日々

プログラムの勉強をしながら学習したことや経験したことをぼそぼそと書いていきます

なんとなく作ったサイト

http://www.it-check-matome.info/


Github(注意すること)

https://github.com/mshige1979

Spring BootのRestTemplateでバイナリデータを取得する

Spring Boot Java LINE API

RestTemplate

Spring BootのAPI処理クラスと思われる

Rest APIの場合は基本JSONなんだけど

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);
        }
    }
}

所感

パッケージだけの場合はどのクラスかわかりにくいので動かすのがちょっと手間取ります。まあ、サンプルとして参考にさせていただいているのでわがままはいえませんけどw