在servlet中检索json数据

时间:2012-10-24 11:15:27

标签: java json servlets extjs extjs4

我在我的应用中使用Extjs 4和Java Servlets。我想以json格式将一些数据发布到服务器。

JSON的格式应该是这样的:

{
    "credentials":[
    {
       "username":"george",
       "password":"xyz"
    }
    ]
}

我在extjs代码中这样做了:

buttons: [{
        text: 'Submit',
        handler: function() {               
            Ext.Ajax.request({
                url: '/Model/FormServlet',
                method: 'POST',
                jsonData : {
                    //Hardcoded values
                    username: "george", 
                    password: "xyz"
                },
                callback: function (options, success, response) {                       
                    alert(response.responseText);
                }
            });
        }           
    }]

1)我相信我不会得到上面发布的JSON格式。请告诉我如何使用jsonData获取该格式。

2)如何在servlet的doPost方法中检索它?由于我没有使用params并将其替换为jsonData,因此request.getParameter无法在servlet doPost方法中使用。

请让我知道如何使这项工作。

此致

3 个答案:

答案 0 :(得分:3)

1)你没事。

2)这是一个POST请求;数据不会出现在参数中(例如,不是multipart / form-data),而是HTTP请求的内容。在doPost中,只需阅读request.getInputStream()中的所有内容,然后使用正确的编码将其转换为字符串,或者如果您注册了request.getContent(),则直接调用ContentHandler

的内容
byte[] ba = IOUtils.toByteArray( req.getInputStream(  ) );
String charset = TypedContentUtils.extractCharset( req.getContentType(  ) );
String json = new String( ba, charset );

IOUtils是Apache Commons IO(编写自己的10行,并进行适当的异常处理); TypedContentUtils.extractCharset是一个简单的自制方法,从Content-Type中提取字符集或默认为utf-8。

答案 1 :(得分:3)

我在doPost方法中尝试了这段代码并且它有效:

StringBuffer jb = new StringBuffer();
      String line = null;
      try {
        BufferedReader reader = req.getReader();
        while ((line = reader.readLine()) != null)
          jb.append(line);
        System.out.println(jb.toString());
      } catch (Exception e) { 
          e.printStackTrace();        
      }

参考文章:

HttpServletRequest get JSON POST data

答案 2 :(得分:2)

1)它会按原样发布数据。内容将是:{username:“george”,密码:“xyz”},如果您想要上面的格式并且它是硬编码的,那么您可以更换它。

2)您可以使用genson库http://code.google.com/p/genson/轻松地将json反序列化为java对象。

UserCredentials userCredentials = new Genson().deserialize(request.getReader(), UserCredentials.class);