小服务程序 request.getParameter return 空

Servlet request.getParameter return null

在网页上,我使用 JQuery 向我的 servlet 发送 Ajax 调用。

function sendAjax() {
            $.ajax({
                url: "/AddOrUpdateServlet",
                type: 'POST',   
                dataType: 'json',
                data: {"name": "hello world"},
                contentType: 'application/json',
                mimeType: 'application/json',

                success: function (data) {   

                },
                error:function(data,status,er) {
                    alert("error: "+data+" status: "+status+" er:"+er);
                }
            });         
        }   

在 AddOrUpdateServlet 的 doPost 中,我有以下代码:

protected void doPost(HttpServletRequest request, 
        HttpServletResponse response) throws ServletException, IOException {
    // TODO Auto-generated method stub 
    String name = request.getParameter("name"); 
    if (name == null) 
        System.out.println("null"); 

    /*
    response.setContentType("application/json");
    response.setCharacterEncoding("UTF-8");
    response.getWriter().write(new Integer(1).toString());
    response.getWriter().close();
    */

}

当控制台打印出 "null" 时,我可以看到 servlet 已成功发送和接收参数。但是为什么 servlet 无法获取 "name" 参数?

因为你在request body of POST中传递了"name"参数,而且上面是JSON类型。

只需GET请求并删除下面的行

`contentType: 'application/json',mimeType: 'application/json',

编辑:-- 在你的 servlet 中写下一行代码,你将不得不使用 JSON 库来解析你的 servlet 中的数据(GSON or Jackson) 参见:- Stack overflow answer

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 = JSONObject.fromObject(jb.toString());
  } catch (ParseException e) {
    // crash and burn
    throw new IOException("Error parsing JSON request string");
  }