このエントリーをはてなブックマークに追加

javaでネットワーク処理を実施するサンプル

依存ライブラリ

オブジェクトをjsonに変換し送付するので「jackson」を利用しています。

<!-- 依存関係を記載する -->
<dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-databind</artifactId>
    <version>2.9.3</version>
</dependency>

jsonにてパラメータを設定し、返却のjsonをオブジェクトに変換し取得するメソッドのサンプル

package jp.dip.snowsaber.utils;

import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.net.HttpURLConnection;
import java.net.URL;

import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;


public class NetUtils {

   /**
    * GETにてJSONを送付・取得を実施する
    * @param url 送付先URL
    * @param inputParam 入力パラメータ
    * @param resultClass レスポンス設定用クラス
    * @return リクエスト返却値
    */
   public static <T,R> R getJson(String url, T inputParam, Class<R> resultClass) {
      return callJson(url, 80, MethodType.GET, inputParam, resultClass);
   }

   /**
    * POSTにてJSONを送付・取得を実施する
    * @param url 送付先URL
    * @param inputParam 入力パラメータ
    * @param resultClass レスポンス設定用クラス
    * @return リクエスト返却値
    */
   public static <T,R> R postJson(String url, T inputParam, Class<R> resultClass) {
      return callJson(url, 80, MethodType.POST, inputParam, resultClass);
   }

   /**
    * jsonにてリクエストを取得・設定する
    * @param callUrl 送付先URL
    * @param port 送付先port
    * @param type リクエストTYPE
    * @param input 入力パラメータ
    * @param clazz レスポンス設定用クラス
    * @return リクエスト返却値
    */
   public static <T, R> R callJson(String callUrl, int port, MethodType type, T input, Class<R> clazz) {
      HttpURLConnection con = null;
      try {
         URL url = new URL(callUrl);
         con = (HttpURLConnection) url.openConnection();
         con.setDoOutput(true);
         con.setRequestMethod(type.name());
            con.setRequestProperty("Content-Type", "application/json-rpc");

            try (OutputStreamWriter osw = new OutputStreamWriter(con.getOutputStream())) {
               osw.write(toJson(input));
               con.connect();
            }

            final int resCode = con.getResponseCode();
            switch (resCode) {
         case HttpURLConnection.HTTP_OK:
            String jsonStr = convertInputStreamToString(con.getInputStream());
            return toOjbect(clazz, jsonStr);
         default:
            throw new RuntimeException(String.format("レスポンスコード[%d]が返却されました", resCode));
         }

      } catch (Exception e) {
         throw new RuntimeException(String.format("%sの接続時例外", callUrl), e);
      } finally {
         if (con != null) {
            con.disconnect();
         }
      }

   }

   /**
    * 引数のオブジェクトをjson文字列に変換して返却する
    * @param ob 変換元のオブジェクト
    * @return json文字列
    */
   public static <T> String toJson(T ob) {
      ObjectMapper mapper = new ObjectMapper();
        try {
         return mapper.writeValueAsString(ob);
      } catch (JsonProcessingException e) {
         throw new RuntimeException(e);
      }
   }

   /**
    * json文字列をObjectに変換し返却
    * @param clazz 変換対象クラス
    * @param jsonStr 変換元文字列
    * @return 返却オブジェクト
    */
   public static <T> T toOjbect(Class<T> clazz, String jsonStr) {
      ObjectMapper mapper = new ObjectMapper();
      try {
         return mapper.readValue(jsonStr, clazz);
      } catch (Exception e) {
         throw new RuntimeException(e);
      }
   }

   /**
    * inputstreamをStringへ変換して返却
    * @param is inputstream
    * @return String文字列
    * @throws IOException
    */
   private static String convertInputStreamToString(InputStream is) throws IOException {
      try (InputStreamReader reader = new InputStreamReader(is, "UTF-8")) {
         StringBuilder builder = new StringBuilder();
         char[] buffer = new char[512];
         int read;
         while (0 <= (read = reader.read(buffer))) {
            builder.append(buffer, 0, read);
         }
         return builder.toString();
      }
   }

   /**
    * HttpMethodType
    */
   public static enum MethodType {
      GET,
      POST,
   }
}