LoginSignup
1
0

JSONファイルからhttpリクエスト情報を取得してhttpリクエストする

Last updated at Posted at 2024-03-07
requestURL.json
{
  "AService": "https://postman-echo.com/post",
  "BService": "https://postman-echo.com/get",
  "CService": "https://postman-echo.com/put"
}
requestHeader.json
{
  "client-id": "id-hoge",
  "Authorization": "auth-info",
  "client-secret": "secret-hoge"
}
requestBody.json
{
  "apiVer": "10.0",
  "list":[
    {
      "name": "hoge",
      "url": "http://hoge.com"
    },
    {
      "name": "fuga",
      "url": "http://fuga.com"
    }
  ]
}
Main.java
package org.example;

import com.fasterxml.jackson.databind.ObjectMapper;

import java.io.File;
import java.util.Map;

public class Main {
    public static void main(String[] args) {
        try {
            // JSONファイルをJavaオブジェクトにマッピングするためのObjectMapperインスタンスを生成
            ObjectMapper objectMapper = new ObjectMapper();

            // ローカル内のreqesutHeader.jsonを取得
            Map<String, Object> requestHeader = objectMapper.readValue(new File("./src/requestHeader.json"), Map.class);

            // ローカル内のreqesutBody.jsonを取得
            Map<String, Object> requestBody = objectMapper.readValue(new File("./src/requestBody.json"), Map.class);

            // Aサービスを呼び出す。POST
            String Aresponse = Util.AService(requestHeader, requestBody);
            System.out.println("Aサービスのレスポンスbody:" + Aresponse);
            // Bサービスを呼び出す。GET
            String Bresponse = Util.BService(requestHeader, "AA100", "010011110");
            System.out.println("Bサービスのレスポンスbody:" + Bresponse);

            // Cサービスを呼び出す。PUT
            String Cresponse = Util.CService(requestHeader, requestBody);
            System.out.println("Cサービスのレスポンスbody:" + Cresponse);

        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}
util.java
package org.example;

import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.core.type.TypeReference;

import java.io.BufferedReader;
import java.io.File;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.net.URLEncoder;
import java.util.Map;

public class Util {
    private static final ObjectMapper objectMapper = new ObjectMapper();
    private static final String REQUEST_URL_FILE_PATH = "./src/requestURL.json";

    /**
     * Aサービスの実行を行います。HTTP POSTリクエストを使用して処理を実行します。
     *
     * @param headerJSON ヘッダー情報を含むMapオブジェクト
     * @param bodyJSON   ボディ情報を含むMapオブジェクト
     * @return サービスからのレスポンス文字列。
     * @throws Exception 例外が発生した場合にスローされます。
     */
    public static String AService(Map<String, Object> headerJSON, Map<String, Object> bodyJSON) throws Exception {
        // requestURL.jsonからAServiceのURLを取得
        Map<String, String> urlMap = objectMapper.readValue(new File(REQUEST_URL_FILE_PATH), new TypeReference<Map<String, String>>() {
        });
        String requestURL = urlMap.get("AService");

        // HTTP POSTリクエストを実行
        return HTTPRequestPOST(headerJSON, bodyJSON, requestURL);
    }

    /**
     * Bサービスの実行を行います。HTTP GETリクエストを使用して処理を実行します。
     *
     * @param headerJSON ヘッダー情報を含むMapオブジェクト
     * @param id      URLパラメータとして送信するID。
     * @param key     URLパラメータとして送信するキー。
     * @return サービスからのレスポンス文字列。
     * @throws Exception 通信エラーまたはファイル操作エラーが発生した場合。
     */
    public static String BService(Map<String, Object> headerJSON, String id, String key) throws Exception {
        // requestURL.jsonからBServiceのURLを取得
        Map<String, String> urlMap = objectMapper.readValue(new File(REQUEST_URL_FILE_PATH), new TypeReference<Map<String, String>>() {
        });
        String requestURL = urlMap.get("BService");
        requestURL += "?id=" + URLEncoder.encode(id, "UTF-8") + "&key=" + URLEncoder.encode(key, "UTF-8");

        return HTTPRequestGET(headerJSON, requestURL);
    }

    /**
     * Cサービスの実行を行います。HTTP PUTリクエストを使用して処理を実行します。
     *
     * @param headerJSON ヘッダー情報を含むMapオブジェクト
     * @param bodyJSON   ボディ情報を含むMapオブジェクト
     * @return サービスからのレスポンス文字列。
     * @throws Exception 例外が発生した場合にスローされます。
     */
    public static String CService(Map<String, Object> headerJSON, Map<String, Object> bodyJSON) throws Exception {
        // requestURL.jsonからCServiceのURLを取得
        Map<String, String> urlMap = objectMapper.readValue(new File(REQUEST_URL_FILE_PATH), new TypeReference<Map<String, String>>() {
        });
        String requestURL = urlMap.get("CService");

        // HTTP POSTリクエストを実行
        return HTTPRequestPUT(headerJSON, bodyJSON, requestURL);
    }

    /**
     * HTTP POSTリクエストを実行します。
     *
     * @param headerJSON ヘッダー情報を含むMapオブジェクト。
     * @param bodyJSON   ボディ情報を含むMapオブジェクト
     * @param requestURL リクエストを送信するURL
     * @return String型のレスポンスデータ
     * @throws Exception 例外が発生した場合にスローされます。
     */
    private static String HTTPRequestPOST(Map<String, Object> headerJSON, Map<String, Object> bodyJSON, String requestURL) throws Exception {
        URL url = new URL(requestURL);
        HttpURLConnection connection = (HttpURLConnection) url.openConnection();
        connection.setRequestMethod("POST");
        System.out.println("リクエストMethod : " + connection.getRequestMethod());
        connection.setDoInput(true);
        connection.setDoOutput(true);

        //リクエスト形式をJsonに指定
        connection.setRequestProperty("Content-Type", "application/json; charset=utf-8");

        // ヘッダーのセット
        for (Map.Entry<String, Object> entry : headerJSON.entrySet()) {
            System.out.println("  " + entry.getKey() + ": " + entry.getValue());
            connection.setRequestProperty(entry.getKey(), entry.getValue().toString());
        }

        // ボディのセット
        try (OutputStream os = connection.getOutputStream()) {
            objectMapper.writeValue(os, bodyJSON);
        }

        //正常終了時はHttpStatusCode 200が返ってくる
        if (connection.getResponseCode() != 200) {
            //エラー処理
            System.out.println("HTTP POSTリクエストエラー : " + connection.getResponseCode());
        }
        //正常終了時はHttpStatusCode 200が返ってくる
        System.out.println("HTTP POSTステータス: " + connection.getResponseCode());

        // レスポンスの取得
        StringBuilder response = new StringBuilder();
        try (BufferedReader reader = new BufferedReader(new InputStreamReader(connection.getInputStream()))) {
            String line;
            while ((line = reader.readLine()) != null) {
                response.append(line);
            }
        }

        return response.toString();
    }

    /**
     * 指定されたURLにHTTP GETリクエストを送信します。
     *
     * @param headerJSON ヘッダー情報を含むMapオブジェクト。
     * @param requestURL リクエストを送信するURL。
     * @return String型のレスポンスデータ
     * @throws Exception 通信エラーが発生した場合。
     */
    public static String HTTPRequestGET(Map<String, Object> headerJSON, String requestURL) throws Exception {
        URL url = new URL(requestURL);
        HttpURLConnection connection = (HttpURLConnection) url.openConnection();
        connection.setRequestMethod("GET");
        System.out.println("リクエストMethod : " + connection.getRequestMethod());


        // ヘッダーのセット
        for (Map.Entry<String, Object> entry : headerJSON.entrySet()) {
            System.out.println("  " + entry.getKey() + ": " + entry.getValue());
            connection.setRequestProperty(entry.getKey(), entry.getValue().toString());
        }
        BufferedReader in = new BufferedReader(new InputStreamReader(connection.getInputStream()));
        String inputLine;
        StringBuilder response = new StringBuilder();
        while ((inputLine = in.readLine()) != null) {
            response.append(inputLine);
        }
        in.close();
        connection.disconnect();

        return response.toString();
    }

    /**
     * HTTP PUTリクエストを実行します。
     *
     * @param headerJSON ヘッダー情報を含むMapオブジェクト
     * @param bodyJSON   ボディ情報を含むMapオブジェクト
     * @param requestURL リクエストを送信するURL
     * @return String型のレスポンスデータ
     * @throws Exception 例外が発生した場合にスローされます。
     */
    private static String HTTPRequestPUT(Map<String, Object> headerJSON, Map<String, Object> bodyJSON, String requestURL) throws Exception {
        URL url = new URL(requestURL);
        HttpURLConnection connection = (HttpURLConnection) url.openConnection();
        connection.setRequestMethod("PUT");
        System.out.println("リクエストMethod : " + connection.getRequestMethod());
        connection.setDoInput(true);
        connection.setDoOutput(true);

        //リクエスト形式をJsonに指定
        connection.setRequestProperty("Content-Type", "application/json; charset=utf-8");

        // ヘッダーのセット
        for (Map.Entry<String, Object> entry : headerJSON.entrySet()) {
            System.out.println("  " + entry.getKey() + ": " + entry.getValue());
            connection.setRequestProperty(entry.getKey(), entry.getValue().toString());
        }

        // ボディのセット
        try (OutputStream os = connection.getOutputStream()) {
            objectMapper.writeValue(os, bodyJSON);
        }

        //正常終了時はHttpStatusCode 200が返ってくる
        if (connection.getResponseCode() != 200) {
            //エラー処理
            System.out.println("HTTP POSTリクエストエラー : " + connection.getResponseCode());
        }
        //正常終了時はHttpStatusCode 200が返ってくる
        System.out.println("HTTP POSTステータス: " + connection.getResponseCode());

        // レスポンスの取得
        StringBuilder response = new StringBuilder();
        try (BufferedReader reader = new BufferedReader(new InputStreamReader(connection.getInputStream()))) {
            String line;
            while ((line = reader.readLine()) != null) {
                response.append(line);
            }
        }

        return response.toString();
    }
}
1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0