代码之家  ›  专栏  ›  技术社区  ›  Lydon Ch

httpservletrequest获取json post数据[重复]

  •  149
  • Lydon Ch  · 技术社区  · 14 年前

    可能重复:
    Retrieving JSON Object Literal from HttpServletRequest

    我是http发布到url http://laptop:8080/apollo/services/rpc?cmd=execute

    具有 发布数据

    { "jsondata" : "data" }
    

    HTTP请求的内容类型为 application/json; charset=UTF-8

    如何从httpservletrequest获取post数据(jsondata)?

    如果我枚举请求参数,我只能看到一个参数, 它是“cmd”,不是post数据。

    3 回复  |  直到 7 年前
        1
  •  258
  •   Ganesh Krishnan    7 年前

    正常情况下,可以在servlet中以相同的方式获取和发布参数:

    request.getParameter("cmd");
    

    但只有当post数据是 encoded 作为内容类型的键值对:“application/x-www-form-urlencoded”,就像使用标准HTML表单一样。

    如果您对您的日志数据使用不同的编码模式,例如在您的案例中发布 JSON数据流 ,您需要使用自定义解码器来处理来自以下位置的原始数据流:

    BufferedReader reader = request.getReader();
    

    JSON后处理示例(使用 org.json 包装)

    public void doPost(HttpServletRequest request, HttpServletResponse response)
      throws ServletException, IOException {
    
      StringBuffer jb = new StringBuffer();
      String line = null;
      try {
        BufferedReader reader = request.getReader();
        while ((line = reader.readLine()) != null)
          jb.append(line);
      } catch (Exception e) { /*report an error*/ }
    
      try {
        JSONObject jsonObject =  HTTP.toJSONObject(jb.toString());
      } catch (JSONException e) {
        // crash and burn
        throw new IOException("Error parsing JSON request string");
      }
    
      // Work with the data using methods like...
      // int someInt = jsonObject.getInt("intParamName");
      // String someString = jsonObject.getString("stringParamName");
      // JSONObject nestedObj = jsonObject.getJSONObject("nestedObjName");
      // JSONArray arr = jsonObject.getJSONArray("arrayParamName");
      // etc...
    }
    
        2
  •  -2
  •   Community Dai    7 年前

    您是从不同的来源(所以不同的端口或主机名)发帖的吗?如果是这样,我刚刚回答的这个最近的话题可能会有所帮助。

    问题在于XHR跨域策略,以及如何使用一种称为JSONP的技术来绕过它的有用提示。最大的缺点是JSONP不支持POST请求。

    我知道在最初的文章中没有提到javascript,但是json通常用于javascript,所以我跳到了这个结论。

        3
  •  -10
  •   Qix - MONICA WAS MISTREATED    11 年前

    发送方(php-json-encode):

    {"natip":"127.0.0.1","natport":"4446"}
    

    接收器(Java JSON解码):

    /**
     * @comment:  I moved  all over and could not find a simple/simplicity java json
     *            finally got this one working with simple working model.
     * @download: http://json-simple.googlecode.com/files/json_simple-1.1.jar
     */
    
    JSONObject obj = (JSONObject) JSONValue.parse(line); //line = {"natip":"127.0.0.1","natport":"4446"}
    System.out.println( obj.get("natport") + " " + obj.get("natip") );     // show me the ip and port please      
    

    希望它对Web开发人员和头脑简单的JSON搜索者有所帮助。