現在andoroidとサーブレットの通信部分を作るにあたり、jsonを取得しjsonを返すサーブレットを作成しようと考えています。
プログラムは以下の通りです。
java
1import java.io.BufferedReader; 2import java.io.IOException; 3import java.io.PrintWriter; 4 5import javax.servlet.ServletException; 6import javax.servlet.annotation.WebServlet; 7import javax.servlet.http.HttpServlet; 8import javax.servlet.http.HttpServletRequest; 9import javax.servlet.http.HttpServletResponse; 10 11import org.json.JSONException; 12import org.json.JSONObject; 13 14 15/** 16 * Servlet implementation class Sample 17 */ 18@WebServlet("/Sample") 19public class Sample extends HttpServlet { 20 private static final long serialVersionUID = 1L; 21 /** 22 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response) 23 */ 24 protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 25 26 String id = null; 27 String password = null; 28 29 // get json 30 request.setCharacterEncoding("utf8"); 31 BufferedReader buffer = new BufferedReader(request.getReader()); 32 String reqJson = buffer.readLine(); 33 34 35 try { 36 JSONObject jsonObject = new JSONObject(reqJson); 37 id = jsonObject.getString("id"); 38 password = jsonObject.getString("password"); 39 } catch (JSONException e) { 40 e.printStackTrace(); 41 } 42 43 response.setContentType("application/json; charset=utf8"); 44 response.setCharacterEncoding("utf8"); 45 PrintWriter out = response.getWriter(); 46 47 48 try { 49 JSONObject obj = new JSONObject(); 50 obj.put("id", id); 51 obj.put("password", password); 52 out.print(obj.toString()); 53 } catch (JSONException e) { 54 e.printStackTrace(); 55 } 56 } 57}
上記のプログラムの内容はjson形式のidとpasswordを受け取り、受け取ったjsonをレスポンスのbodyに入れるというものです。
ここで、chromeの拡張機能を使用し、Advanced REST clientで下記のjsonをpostで送信しました。
json
1{ 2 "id": "tarou@gmail.com", 3 "password": "12345" 4}
結果、ステータスコード200で通信はできているのですが、レスポンスのbodyが空の状態で返ってきます。
レスポンスにjsonを入れるにはどうしたら良いのでしょうか?
ネット上で調べてみても中々わからなかったため質問させていただきました。未熟な質問ですいませんが回答のほどよろしくお願いいたします。
(追記)何度も試してみるうちに、リクエストのjsonを受け取る部分でidとpasswordをきちんと受け取れていないことがわかりました。ただ、この部分のコードのどこに間違いがあるのか分かりません。もしよろしければ回答のほどよろしくお願いいたします。
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/01/14 08:03
2019/01/14 08:09