【问题标题】:String string = request.getParameter("data") is nullString string = request.getParameter("data") 为空
【发布时间】:2013-10-26 05:51:15
【问题描述】:

我正在编写一个 servlet,它将接受来自 AJAX 请求的 POST 数据。

这是我从客户端发送的代码:

$.ajax({
            type: "POST",
            url: "urlservlet",
            data: "{type:'" + "country" + 
            "', country:'" + $('#country').val() +
            "'}",
            contentType: "application/json; charset=utf-8",
            dataType: "json",
            success: function(response) {

            }


这是 servlet 代码:

protected void doPost(HttpServletRequest request, HttpServletResponse response)
                      throws ServletException, IOException {
    string test = request.getParameter("type");
}

但问题是我总是得到等于 null 的类型。我不知道为什么。

请帮助我。

【问题讨论】:

  • 你的标题是getP(data),而你的代码是getP(type)。真正的问题是什么?

标签: java ajax json servlets


【解决方案1】:

您正在将 JSON 写入您的请求正文并期望请求参数。来自javadoc

将请求参数的值作为字符串返回,如果是 参数不存在。请求参数是额外信息 随请求发送。 对于 HTTP servlet,参数包含在 查询字符串或发布的表单数据。

您还没有发布表单数据,也没有查询字符串。

您想要的是读取带有HtppServletRequest#getInputStream() 的HTTP 请求正文并解析JSON 以提取您的元素。

【讨论】:

  • 哦,好吧。请详细说明。请。 :)
  • @pepsi 详细阐述什么主题?我的回答中有一些关键词可以帮助你找到你想要的。
  • 谢谢,感谢您的宝贵时间。只是询问示例代码。因为我对java很陌生。:)
  • 我使用 contentType: "application/x-www-form-urlencoded" 修复了这个问题,然后使用 getParameterMap() 方法在服务器端获取它,然后操作字符串使其成为有效的 json 数据。 :)
【解决方案2】:

问题正如@Sotirios 所描述的那样。但是,我会通过在服务器端使用 Java REST 框架来解决它,例如 RESTEasySpring MVCRestlet。最好使用抽象,这样您就可以专注于您的业务逻辑,而不是 Servlet API 的低级细节。

还有一个像Jackson 这样的JSON 序列化器/反序列化器,以避免处理解析JSON 的低级细节。 Jackson 及其替代品与我提到的 REST 框架无缝集成。

我喜欢好的抽象。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-06-14
    • 1970-01-01
    • 2020-01-01
    • 1970-01-01
    • 2021-07-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多