服务器无法解析 ajax post 参数中的某些内容,这是什么原因造成的?

Server can't parse something in ajax post parameter, what is causing this?

我正在发出 ajax post 请求,我可以看到值正在客户端的 header 中传递。

但是在服务器端收到的值是空的?服务器在尝试解析值时似乎对值中的某些内容感到窒息。因为如果我使用 encodeURIComponent 它工作正常。是什么导致了这种行为?

<script>

    //var body = getDataFromTheEditor(); //doesn't work
    //var body = JSON.stringify(getDataFromTheEditor()); //doesn't work
    var body = encodeURIComponent(getDataFromTheEditor()); //works but don't want to do this...

    var params = {body: body};
    $.post("../../../../CommitEdit", $.param(params));

</script>

Servlet:

protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

    String body = request.getParameter("body");
    System.out.println(body); //blank if i pass it normally :(

}

我在传递时直接从 header 复制了表单数据(所以这里有些东西服务器显然不喜欢):

pastebin - unparsed formdata

pastebin - parsed formdata

相关请求headers:

Content-Length: 64488
Content-Type: application/x-www-form-urlencoded; charset=UTF-8

有什么想法吗?谢谢。

这可能是由于网络服务器设置中的一些安全规则引起的。 您可以使用以下方法解码 Java 中的数据:

String res= java.net.URLDecoder.decode(body, "UTF-8");

问题是因为字符串太长了。显然 Eclipse 中的控制台有字符限制。这就是为什么我看到一个空白值。这里的这个问题帮助解决了问题:

Character limit for System.out.println() in Java

解决方法是:

  1. Go to Window > Preferences > Run/Debug > Console
  2. Uncheck "Limit Console Output" (Alternatively you can increase the Console buffer size.)