2016-09-29 744 views
0

我想從HttpServletRequest獲取Json鍵值。Java從HttpServletRequest獲取JSON數據

我的Java代碼下面給出

import java.io.BufferedReader; 
import java.io.IOException; 
import javax.servlet.ServletException; 
import javax.servlet.annotation.WebServlet; 
import javax.servlet.http.HttpServlet; 
import javax.servlet.http.HttpServletRequest; 
import javax.servlet.http.HttpServletResponse; 
import org.json.HTTP; 
import org.json.JSONException; 
import org.json.JSONObject; 

@WebServlet("/Service") 
public class Service extends HttpServlet { 
    private static final long serialVersionUID = 1L; 

    public void doPost(HttpServletRequest request, HttpServletResponse response) 
      throws ServletException, IOException, JSONException { 
     StringBuffer jb = new StringBuffer(); 
     String line = null; 
     try { 
      BufferedReader reader = request.getReader(); 
      while ((line = reader.readLine()) != null) { 
       jb.append(line); 
      } 
     } catch (Exception e) { 
     } 

     try { 
      JSONObject jsonObject = HTTP.toJSONObject(jb.toString()); 
      String email = jsonObject.getString("email"); 
     } catch (Exception e) { 
     } 
    } 
} 

郵政JSON

{ 
    "email": "[email protected]", 
    "fname": "test01" 
} 

我使用JSONObject jsonObject = HTTP.toJSONObject(jb.toString());

{"\"[email protected]\",\t\"fname\"":"\"test01\"}","Request-URI":"email","Method":"{","HTTP-Version":":"} 

我沒有得到使用String email = jsonObject.getString("email");

任何價值得到下面的JSON輸出

我使用的是使用JAVA的Eclipse Mars 1。

回答

-1

你如何傳遞你的json?

如果你是在把它當作Content-Type: application/x-www-form-urlencoded,那麼上面的都不行 - 你應該使用類似

JSONObject jObj = new JSONObject(request.getParameter("mydata")); 

其中mydata是HTML表單字段的名稱。

如果您使用Content-Type: application/json,您提供的代碼應該工作。你能證實嗎?

無論如何,在servlet中輸出jb.toString()的內容是很有價值的,所以你可以在它試圖把它解析爲JSON之前看看它是什麼進入它,如果它已經是無效的。

如果你可以使用捲曲,以測試你的代碼:

curl http://localhost:8080/ -H "Content-Type: application/json" -X POST -d '{"email": "[email protected]","fname": "test01"}' 

或代碼,如下面的最後一個引用。

參考文獻: