はじめに
APIやサーバとの通信では、多くがJSONの形式です。 そこで、サーバサイドのjavaからJSONを返すテンプレートを作りました。
標準ライブラリのjava.net.HttpURLConnection
を使います。
他に使用するライブラリも標準ものでまとめてあります。
参考 : HttpURLConnectionを使ってPOSTやGETでリクエストするサンプル(proxyも考慮)
プログラム
package HttpRequest;
import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.net.HttpURLConnection;
import java.net.URL;
public class HttpSendJSON {
/**
* JSON文字列の送信
* @param strPostUrl 送信先URL
* @param JSON 送信するJSON文字列
* @return
*/
public String callPost(String strPostUrl, String JSON) {
HttpURLConnection con = null;
StringBuffer result = new StringBuffer();
try {
URL url = new URL(strPostUrl);
con = (HttpURLConnection) url.openConnection();
// HTTPリクエストコード
con.setDoOutput(true);
con.setRequestMethod("POST");
con.setRequestProperty("Accept-Language", "jp");
// データがJSONであること、エンコードを指定する
con.setRequestProperty("Content-Type", "application/JSON; charset=utf-8");
// POSTデータの長さを設定
con.setRequestProperty("Content-Length", String.valueOf(JSON.length()));
// リクエストのbodyにJSON文字列を書き込む
OutputStreamWriter out = new OutputStreamWriter(con.getOutputStream());
out.write(JSON);
out.flush();
con.connect();
// HTTPレスポンスコード
final int status = con.getResponseCode();
if (status == HttpURLConnection.HTTP_OK) {
// 通信に成功した
// テキストを取得する
final InputStream in = con.getInputStream();
String encoding = con.getContentEncoding();
if (null == encoding) {
encoding = "UTF-8";
}
final InputStreamReader inReader = new InputStreamReader(in, encoding);
final BufferedReader bufReader = new BufferedReader(inReader);
String line = null;
// 1行ずつテキストを読み込む
while ((line = bufReader.readLine()) != null) {
result.append(line);
}
bufReader.close();
inReader.close();
in.close();
} else {
// 通信が失敗した場合のレスポンスコードを表示
System.out.println(status);
}
} catch (Exception e1) {
e1.printStackTrace();
} finally {
if (con != null) {
// コネクションを切断
con.disconnect();
}
}
return result.toString();
}
}
使用方法
簡単なログイン認証のサンプルを例示します。パッケージ名などは任意で変更して下さい。
package HttpRequest;
public class Main {
public static void main(String[] args) {
// 送信先URL
String strPostUrl = "http://{hostname}/api/login/";
// アカウント情報のJSON文字列
String JSON = "{"account":"hoge", "passwd":"piyo"}";
// 認証
HttpSendJSON httpSendJSON = new HttpSendJSON();
String result = httpSendJSON.callPost(strPostUrl, JSON);
// 結果の表示
System.out.println(result);
}
}
対向試験用
送信先の処理はphpで作成しました。レスポンスもJSONで返すようにしています。
<?php
// リクエストのbodyを取り出す。
$JSON_string = file_get_contents('php://input');
// JSON文字列を変換。arrayにするためにはtrueが必要です。
$JSON_array = JSON_decode($JSON_string,true);
// レスポンスの形式を指定
header("Content-Type: application/JSON; charset=utf-8");
// アカウント情報と比較
$account = "hoge";
$passwd = "piyo";
if (strcasecmp($account, $JSON_array['account']) == 0 &&
strcasecmp($passwd, $JSON_array['passwd']) == 0) {
// 認証成功
// tokenと認証成功であることを返す。
echo '{"result":"success", "token":"xxxxxxxxxx"}';
}
else {
// 認証失敗
echo '{"result":"faiiure"}';
}
おわりに
VSCodeでJavaの開発環境を構築する方法をまとめました。
書籍紹介
新入社員として初めてJavaとサーブレットを勉強していた時、この3冊に大変お世話になりました。 仕事で使う技術の基礎が体系的にまとまっていています。 まずはこの3冊の中でわからないところを読み込んだり調べたりして学べば、成長できるのではと思います。