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

Web系開発メモ

Java, SpringBoot, JavaScript, CSS, HTML, などの記事を書いてます。

SpringBoot入門:外部のサービスに接続

Spring Boot 入門

Spring Boot の Web アプリ(サーバサイドの Java)から、外部のサービスに接続する方法を書きます。

今回は、Spring Boot が提供するサービス http://gturnquist-quoters.cfapps.io/api/random に接続して、JSON を取得してみます。JSON の内容は、次のようなものです。

{
   type: "success",
   value: {
      id: 10,
      quote: "Really loving Spring Boot, makes stand alone Spring apps easy."
   }
}

前提

この記事は、入門記事「JSONの返却」の資源(ビルドファイル、クラス等)を利用しています。必要に応じて参照して頂けると嬉しいです。

手順1. コントローラの作成

Spring FrameworkRestTemplate を使って外部サービスに接続します。外部サービスの JSON を、レスポンスとして返却します。

gssb/src/main/java/gssb/controller/AccessingExternalServiceController.java

package gssb.controller;

import org.springframework.http.HttpMethod;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.client.RestTemplate;

import lombok.Data;

@RestController
public class AccessingExternalServiceController {

  // RestTemplate はスレッドセーフ
  // https://spring.io/blog/2009/03/27/rest-in-spring-3-resttemplate/
  private final RestTemplate rt = new RestTemplate();
  
  // 外部サービスの URL 
  // https://spring.io/guides/gs/consuming-rest/
  private final String url = "http://gturnquist-quoters.cfapps.io/api/random";
  
  // 外部サービスの JSON を、そのまま(JSON のまま)返却。
  @RequestMapping(value="/ex/exchange")
  public ResponseEntity<String> exchange() {
    return rt.exchange(url, HttpMethod.GET, null, String.class);
  }
  
  // 外部サービスの JSON を、一度オブジェクトにしてから返却。
  @RequestMapping(value="/ex/get-object")
  public RandomValue getObject() {
    return rt.getForObject(url, RandomValue.class);
  }
  @Data static class RandomValue {
    private String type;
    private Value value;    
  }
  @Data static class Value {
    private long id;
    private String quote;
  }
}

外部サービスの JSONPOJO にしたい場合は、2つ目のメソッド getObject が参考になると思います。

手順2. 起動

次のコマンドでアプリを起動します。

gssb > gradle bootRun

手順3. 確認

動作確認には curl を使います。1つ目のメソッドを、次のように確認してみます。

> curl http://localhost:8080/ex/exchange
{"type":"success","value":{"id":12,"quote":"@springboot with @springframework is
 pure productivity! Who said in #java one has to write double the code than in o
ther langs? #newFavLib"}}

2つ目のメソッドも確認してみます。

> curl http://localhost:8080/ex/get-object
{"type":"success","value":{"id":4,"quote":"Previous to Spring Boot, I remember X
ML hell, confusing set up, and many hours of frustration."}}

どちらも外部サービスの JSON を返してくれます。

目次

SpringBoot入門:目次