【问题标题】:Retrieving jsonData in servlet在 servlet 中检索 jsonData
【发布时间】:2012-10-14 10:16:24
【问题描述】:

我在我的应用程序中使用 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 在 servlet doPost 方法中不起作用。

请告诉我如何完成这项工作。

问候,

【问题讨论】:

  • 尝试在 Ajax 请求中的 params params : Ext.encode({credentials:[{username:'george',password:'xyz'}]}) 中添加此内容。

标签: java json servlets extjs extjs4


【解决方案1】:

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

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

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

【讨论】:

  • 首先,我不想使用任何第三方库。其次,问题在于在 servlet 中检索 JSON。一旦我能够在 servlet doPost 中检索它,我就可以使用我的应用工作区中已经存在的一些实用方法将它反序列化为 java 对象。
  • @user182944 好的,检索 json 内容使用 request.getReader() 或 request.getInputStream() (都可以)
  • 感谢您的帮助。它确实为我指明了正确的方向。
【解决方案2】:

1) 你没事

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

类似的东西

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。

【讨论】:

  • 好的,这篇文章很有帮助,我使用下面发布的代码解决了这个问题。感谢您的帮助。
【解决方案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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-05-17
    • 2018-02-13
    • 1970-01-01
    • 2012-01-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多