SAStrutsでPOSTされたもの(リクエストパラメータ/JSON文字列)を受け取る話
----------------------------------------------------------------------------------------------------
★リクエストパラメータの場合
----------------------------------------------------------------------------------------------------
<クライアント側(HttpURLConnection)>
・HttpURLConnection(またはHttpsURLConnection)をconとする
・con.setDoOutput(true);
・con.setRequestMethod("POST");
・con.setRequestProperty("Content-Type", "application/x-www-form-urlencoded; charset=UTF-8");
→String input = "test=value&test2=value2"; をPrintWriter
参考: Java - POSTメソッドを介してHTTPパラメータを簡単に送信 | CODE Q&A 問題解決 [日本語]
<ホスト側(HTTP)>
いろんな受け取り方がある
○RequestUtilを使う
・HttpServletRequest request = RequestUtil.getRequest();
・request.getParameter("user_id")
参考: Java、SAStruts、ActionでHTTPヘッダを取得|マコトのおもちゃ箱 ~ぼへぼへ自営業者の技術メモ~
○ActionContextを使う
・Map<String,Object> request = ActionContext.getContext().getParameters();
・Object value = ActionContext.getContext().getParameters().get("key");
参考: ActionクラスからPOST, GETパラメータを取得 - ノウハウ共有サイト!
○RequestUtilを使ってMapで受け取る
・HotdeployHttpServletRequest request = (HotdeployHttpServletRequest) RequestUtil.getRequest();
・Map<String, String[]> requestMap = request.getRequest().getParameterMap();
(自分でごちゃごちゃやってて見つけた)
----------------------------------------------------------------------------------------------------
★JSONの場合
----------------------------------------------------------------------------------------------------
<クライアント側(HttpURLConnection)>
・HttpURLConnection(またはHttpsURLConnection)をconとする
・con.setDoOutput(true);
・con.setRequestMethod("POST");
・con.setRequestProperty("Content-Type", "application/json; charset=UTF-8");
→String input = "{ test:\"value\", test2:\"value2\" }"; をPrintWriter
参考:
<ホスト側(HTTP)>
・HttpServletRequest request = RequestUtil.getRequest();
・String postBody = ReaderUtil.readText(request.getReader()); で受け取る
→無事「{ test:"value", test2:"value2" }」が入っていた。JSONパースすれば使える!
参考:
★おまけ
こちらのページは、ソースコメントも多く、対向試験も(PHPでですが)やっていて、親切だなぁと思いました。
PHPerの方へのためにも参考情報として。