【问题标题】:Java get JSON data from HttpServletRequestJava 从 HttpServletRequest 获取 JSON 数据
【发布时间】:2017-02-07 23:34:32
【问题描述】:

我想从 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 输出

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

使用String email = jsonObject.getString("email");我没有得到任何价值

我正在通过 JAVA 使用 Eclipse Mars 1。

【问题讨论】:

    标签: java


    【解决方案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,请使用以下命令测试您的代码:

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

    或下面最后一个参考中的代码。

    参考资料:

    【讨论】:

      猜你喜欢
      • 2011-04-19
      • 2020-11-04
      • 2013-09-12
      • 2019-10-24
      • 2018-02-07
      • 2018-05-16
      • 1970-01-01
      • 2012-12-06
      • 2015-02-02
      相关资源
      最近更新 更多