【问题标题】:Send a simple JSON object in Java to a Servlet将 Java 中的简单 JSON 对象发送到 Servlet
【发布时间】:2017-06-22 01:54:13
【问题描述】:

我正在尝试将 JSONObject (org.json) 从 java 客户端发送到 servlet,但在我的服务器端,我得到 HttpServletRequest.getParameter("Command") 或任何参数的“null”。

在我的客户端:

JSONObject json = new JSONObject();
    try{
        json.put("Command","spost");
        json.put("Name","pc1");
        json.put("Pwd","pc1");
        sendRequest(json);
    } catch(JSONException jsone){

    }
    URL url;
    HttpURLConnection connection = null;
    ObjectOutputStream out;
    try {
        url = new URL("http://myURL.com/myservlet");     //Creating the URL.
        connection = (HttpURLConnection) url.openConnection();
        connection.setRequestMethod("POST");
        connection.setRequestProperty("Content-Type", "application/json");
        //connection.setRequestProperty("Accept", "application/json");
        connection.setUseCaches(false);
        connection.setDoInput(true);
        connection.setDoOutput(true);
        //Send request
        OutputStream os = connection.getOutputStream();
        OutputStreamWriter osw = new OutputStreamWriter(os, "UTF-8");
        System.out.println(json.toString());
        osw.write(json.toString());
        osw.flush();
        osw.close();
        if (connection.getResponseCode() == HttpURLConnection.HTTP_OK) {
            System.out.println("Ok response");
        } else {
            System.out.println("Bad response");
        }
    } catch (Exception ex) {
        ex.printStackTrace();
    }

然后我在打印 json.toString() 时得到这样的结果:

{"Name":"pc1","Command":"SignalPost","Pwd":"pc1"}

...这对我来说看起来很正常。

我看到“Ok response”并且我的 servlet 检测到 httprequest,但似乎理解 json 对象有问题

我的 servlet 在我使用 AJAX 制作的另一个客户端上运行良好,所以我想问题出在这个 java 客户端上。

你能帮帮我吗?我用谷歌搜索并尝试了一切都没有运气

谢谢

编辑:

最后,在服务器端,这段代码正在运行:

    @Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    try{
        StringBuilder sb = new StringBuilder();
        BufferedReader br = request.getReader();
        String str = null;
        while ((str = br.readLine()) != null) {
            sb.append(str);
            System.out.println(str);
        }
        JSONObject jObj = new JSONObject(sb.toString());
        String name = jObj.getString("Name");
        String pwd = jObj.getString("Pwd");
        String command = jObj.getString("Command");

        JSONObject json = new JSONObject();
        response.setContentType("application/json");
        response.setHeader("Cache-Control", "nocache");
        response.setCharacterEncoding("utf-8");
        PrintWriter out = response.getWriter();
        out.print(json.toString());
    } catch (Exception e) {
      e.printStackTrace();
    }
}

虽然我更愿意继续使用来自客户端的 GET 请求,这样我就不必重新制作我所有的 servlet 端

【问题讨论】:

    标签: java json servlets send


    【解决方案1】:

    您的 json 对象不是作为请求参数发送的,而是在请求正文中发送的。

    因此,在您的服务器端 servlet 中,您不必尝试从任何请求参数中恢复它,您必须从 HttpServletRequest 的 InputStream 中读取它。

    阅读它,然后使用您在 servlet 方法中选择的 json 库对其进行解析,您将得到它。

    【讨论】:

    • 你说的对我来说是有道理的,但是我不明白为什么我尝试用“GET”更改“POST”不起作用。
    • 使用“GET”时不能在请求正文中写入
    • 我还尝试在 url "String encodedJSON = URLEncoder.encode(json.toString(),"UTF-8");" 中对 json 进行编码使用 GET 时...但没有用。
    • 我在使用 post 时也找不到解析 servlet 中的 in-body 对象的方法
    【解决方案2】:

    尝试添加connection.connect()

    try {
            url = new URL("http://myURL.com/myservlet");     //Creating the URL.
            connection = (HttpURLConnection) url.openConnection();
            connection.setRequestMethod("POST");
            connection.setRequestProperty("Content-Type", "application/json");
            //connection.setRequestProperty("Accept", "application/json");
            connection.setUseCaches(false);
            connection.setDoInput(true);
            connection.setDoOutput(true);
    
            connection.connect() //New line
    
    
    
            //Send request
            OutputStream os = connection.getOutputStream();
            OutputStreamWriter osw = new OutputStreamWriter(os, "UTF-8");
            System.out.println(json.toString());
            osw.write(json.toString());
            osw.flush();
            osw.close();
            if (connection.getResponseCode() == HttpURLConnection.HTTP_OK) {
                System.out.println("Ok response");
            } else {
                System.out.println("Bad response");
            }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-02-13
      • 2014-10-16
      • 2017-07-27
      • 1970-01-01
      • 2012-12-15
      • 1970-01-01
      相关资源
      最近更新 更多