1

我在我的应用程序中使用 Extjs 4 和 Java Servlet。我想以 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不会在 servletdoPost方法中工作。

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

问候,

4

3 回答 3

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。

于 2012-10-24T12:33:14.657 回答
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 获取 JSON POST 数据

于 2012-10-24T13:13:46.393 回答
2

1)它将按原样发布数据。内容将是:{用户名:“george”,密码:“xyz”},如果你想要上面的格式并且它是硬编码的,那么你可以直接替换它。

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

UserCredentials userCredentials = new Genson().deserialize(request.getReader(), UserCredentials.class);
于 2012-10-24T12:27:34.790 回答