簡體   English   中英

Java從HttpServletRequest獲取JSON數據

[英]Java get JSON data from HttpServletRequest

我想從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": "test@xyz.com",
    "fname": "test01"
}

我正在使用JSONObject jsonObject = HTTP.toJSONObject(jb.toString());低於JSON輸出JSONObject jsonObject = HTTP.toJSONObject(jb.toString());

{"\"test@xyz.com\",\t\"fname\"":"\"test01\"}","Request-URI":"email","Method":"{","HTTP-Version":":"}

我沒有使用String email = jsonObject.getString("email");獲得任何值String email = jsonObject.getString("email");

我正在使用JAVA使用Eclipse Mars 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()的內容都是jb.toString()的,因此,如果它已經無效,則可以在嘗試將其解析為JSON之前先查看其中的內容。

如果可以使用curl,請使用以下命令測試代碼:

curl http://localhost:8080/ -H "Content-Type: application/json" -X POST -d '{"email": "test@xyz.com","fname": "test01"}'

或以下最后參考中的代碼。

參考文獻:

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM