Странное искажение JSON-String в Tomcat - PullRequest
0 голосов
/ 19 марта 2019

Пожалуйста, объясните мне, что является причиной искажения JSON-String, отправленного из приложения JavaFX на сервер Tomcat. Часть символов заменена странными квадратными символами:

screenshot-1 of JSON-String printed to console

Разговор с JSON проходит правильно - я проверил его, напечатав JSON-String на консоли в приложении JavaFX после сериализации. Но после переноса на Tomcat-сервер методом DoPost JSON-String искажается. И я тоже пытался передавать XML - он искажается таким же образом.

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

screenshot-2 of JSON-Strings printed to console

И приложение JavaFX, и сервер Tomcat запускаются на локальном компьютере под Intellij IDEA, так что это не проблема сети.

1 Ответ

0 голосов
/ 20 марта 2019

Большое спасибо пользователю Ник на ru.stackoverflow.com: https://ru.stackoverflow.com/users/216863/nick

Он дал точную причину - длину inputStream.GZIP дает неверное значение длины inputStream сервлету.И когда я заменил этот код: `public String getInputString (HttpServletRequest req) {String receiveString =" ";

    int len = req.getContentLength();
    byte[] input = new byte[len];

    try {
        ServletInputStream sin = req.getInputStream();
        int c = 0;
        int count = 0;
        while ((c = sin.read(input, count, (input.length - count))) > 0) {
            count += 1;
        }
        sin.close();
    } catch (IOException e) {

    }

    receivedString = new String(input);

    return receivedString;
}`[PasteBin-1][1]

следующим образом:` public String getInputString (HttpServletRequest req) {String receiveString = "" *

    try (BufferedReader reader = new BufferedReader(new InputStreamReader(req.getInputStream()))) {
        StringBuilder sb = new StringBuilder("");

        while (reader.ready()) {
            sb.append(reader.readLine());
        }

        if (sb.length() > 0) {
            receivedString = sb.toString();
        }

    } catch (IOException e) {

    }

    return receivedString;
}`[PasteBin-2][2]

все стало работать правильно.

Это та же ветка вопросов на русском языке: ответ на ru.stackoverflow.com

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...