Сервер не может разобрать что-то в параметре ajax post, что вызывает это? - PullRequest
0 голосов
/ 10 ноября 2018

Я делаю пост-запрос ajax и вижу, что значение передается в заголовках на стороне клиента.

Однако на стороне сервера полученное значение пусто? Сервер, кажется, захлебывается чем-то в значении, когда он пытается проанализировать это. Потому что, если я использую 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 :(

}

Я скопировал данные формы непосредственно из заголовка во время его передачи (так что здесь есть что-то, что серверу явно не нравится):

pastebin - неразобранные данные

pastebin - проанализированные данные

Соответствующие заголовки запроса:

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

Есть идеи? Благодарю.

Ответы [ 2 ]

0 голосов
/ 13 ноября 2018

Проблема была в том, что строка была слишком длинной. Видимо консоль в Eclipse имеет ограничение по количеству символов. Вот почему я видел пустое значение. Этот вопрос здесь помог решить проблему:

Предел символов для System.out.println () в Java

Решение:

  1. Перейдите в «Окно»> «Установки»> «Выполнить / отладить»> «Консоль»
  2. Снимите флажок «Ограничить вывод на консоль» (в качестве альтернативы вы можете увеличить размер буфера консоли.)
0 голосов
/ 10 ноября 2018

Возможно, это вызвано некоторыми правилами безопасности в настройках веб-сервера. Вы можете декодировать свои данные в Java, используя это:

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