Java从HttpServletRequest获取JSON数据

时间:2016-09-29 14:59:18

标签: java java-api

我想从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");

我没有任何价值

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

1 个答案:

答案 0 :(得分:-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"}'

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

参考文献: