「Spring 5.3.21」RestTemplateでREST APIにアクセスしJSONを取得するサンプル

環境
Spring 5.3.21
Java17
Eclipse 2022-06 M2 (4.24.0 M2)

RestTemplateでREST APIにアクセスしJSONを取得する手順
1.pom.xmlに依存関係ライブラリを追加します

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
      <modelVersion>4.0.0</modelVersion>
      <groupId>arkgame</groupId>
      <artifactId>arkgame</artifactId>
      <version>0.0.1-SNAPSHOT</version>
      <dependencies>
            <!-- https://mvnrepository.com/artifact/org.springframework/spring-context -->
            <!--@ComponentScanや@Component使用-->
            <dependency>
                  <groupId>org.springframework</groupId>
                  <artifactId>spring-context</artifactId>
                  <version>5.3.21</version>
            </dependency>
            <!-- https://mvnrepository.com/artifact/org.springframework/spring-beans -->
            <dependency>
                  <groupId>org.springframework</groupId>
                  <artifactId>spring-beans</artifactId>
                  <version>5.3.21</version>
            </dependency>

            <!-- https://mvnrepository.com/artifact/com.fasterxml.jackson.core/jackson-databind -->
            <!-- JSONとJavaオブジェクトの変換-->
            <dependency>
                  <groupId>com.fasterxml.jackson.core</groupId>
                  <artifactId>jackson-databind</artifactId>
                  <version>2.13.3</version>
            </dependency>
            <!-- https://mvnrepository.com/artifact/org.springframework/spring-web -->
            <!-- RestTemplateで使用-->
            <dependency>
                  <groupId>org.springframework</groupId>
                  <artifactId>spring-web</artifactId>
                  <version>5.3.21</version>
            </dependency>
      </dependencies>
</project>

説明
spring-webは、RestTemplateで使用します。
spring-contextは、@ComponentScanや@Componentで使用します。
jackson-databindは、JSONとJavaオブジェクトの変換をします。

2.起動するクラス(UserController.java)

package com.arkgame.study;

import org.springframework.beans.BeansException;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class UserController {

      public static void main(String[] args) {

            // DIコンテナを生成
            try (ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml")) {

                  // DIコンテナからbeanインスタンスを取得
                  UserService us = context.getBean(UserService.class);
                  //通信を行いJSONを取得します
                  us.getAllJsonData();
                  
                  context.close();

            } catch (BeansException e) {
                  e.printStackTrace();
            }

      }

}

3.、RestTemplateをDIコンテナに登録(applicationContext.xml)

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
      xmlns:context="http://www.springframework.org/schema/context"
      xsi:schemaLocation="http://www.springframework.org/schema/beans
    http://www.springframework.org/schema/beans/spring-beans.xsd
    http://www.springframework.org/schema/context
    http://www.springframework.org/schema/context/spring-context.xsd">

      <!-- RestTemplateをDIコンテナに登録 -->
      <bean id="restTemplate"
            class="org.springframework.web.client.RestTemplate"></bean>

      <!-- 指定したパッケージの配下がscanの対象 -->
      <context:component-scan
            base-package="com.arkgame.study" />

      <bean id="clientHttpRequestFactory"
            class="org.springframework.http.client.SimpleClientHttpRequestFactory">
            <!-- サーバとの接続タイムアウトの設定時間 -->
            <property name="connectTimeout" value="3000" />
            <!-- レスポンスデータの読み込みタイムアウト時間 -->
            <property name="readTimeout" value="3000" />
      </bean>
</beans>

4.RestTemplateクラスからJSONを取得するクラス(UserService.java)

package com.arkgame.study;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.springframework.web.client.RestTemplate;

@Component
public class UserService {

      @Autowired
      RestTemplate restTemplate;

      // JSONのテストURLを指定します
      public static final String JSONURL = "http://httpbin.org/get";

      public void getAllJsonData() {
            // JSONの全て結果が出力
            String result = restTemplate.getForObject(JSONURL, String.class);
            System.out.println(result);
      }

}

5.実行結果
JSONの全文が出力されます

{
  "args": {}, 
  "headers": {
    "Accept": "text/plain, application/json, application/*+json, */*", 
    "Host": "httpbin.org", 
    "User-Agent": "Java/17.0.3", 
    "X-Amzn-Trace-Id": "Root=xxx"
  }, 
  "origin": "xxx.xxx.xxx.xxx", 
  "url": "http://httpbin.org/get"
}

 

Spring Boot CLI

Posted by arkgame