Ошибка синтаксического анализа JSON, POST, содержащего \ r \ n, в начале JSON - PullRequest
0 голосов
/ 04 сентября 2018

Я создал API для создания заметок в моем приложении с контрактом и его клиентом. Клиент - это в основном Фабрика для управления экземплярами Api и помощник для внедрения конфигураций, а также некоторые перехватчики для метрик и Basic Auth.

Я создал простое и маленькое Java-приложение для тестирования клиента.

Все выглядит найти, клиент правильно создает экземпляр и использует объекты API для создания запроса (это POST) и отправляет его. Сервер получает запрос и правильно обрабатывает аутентификацию, но затем выдает эту ошибку:

org.grails.web.json.JSONException: неопределенная строка в символе 311 из \ r \ n {"noteUser": "user.user", "subject": "Билет выпущен только описание этого бронирования имеет только рейс, пожалуйста, проверьте если какие-либо вспомогательные принадлежности необходимо забронировать "," description ":" GONZALO TEST: хорошо, в этом бронировании только рейс, пожалуйста, проверьте, есть ли Нужно заказывать ancillery "," bookingId ":" 433301392

Отладка Я нашел это:

Похоже, что не \ r \ n добавлено в клиент - журнал:

2018-09-04 09:48:52 DEBUG RestDefaultHttpClient:643 - Attempt 1 to execute request
2018-09-04 09:48:52 DEBUG DefaultClientConnection:264 - Sending request: POST /uno/v3/notes/addNote HTTP/1.1
2018-09-04 09:48:52 DEBUG wire:63 - >> "POST /uno/v3/notes/addNote HTTP/1.1[\r][\n]"
2018-09-04 09:48:52 DEBUG wire:63 - >> "Accept: application/json;charset="UTF-8"[\r][\n]"
2018-09-04 09:48:52 DEBUG wire:63 - >> "Accept-Encoding: gzip, deflate[\r][\n]"
2018-09-04 09:48:52 DEBUG wire:63 - >> "Content-Length: 311[\r][\n]"
2018-09-04 09:48:52 DEBUG wire:63 - >> "Content-Type: application/json;charset="UTF-8"[\r][\n]"
2018-09-04 09:48:52 DEBUG wire:63 - >> "Host: localhost:8080[\r][\n]"
2018-09-04 09:48:52 DEBUG wire:63 - >> "Connection: Keep-Alive[\r][\n]"
2018-09-04 09:48:52 DEBUG wire:63 - >> "User-Agent: Apache-HttpClient/4.1.2 (java 1.5)[\r][\n]"
2018-09-04 09:48:52 DEBUG wire:63 - >> "Authorization: Basic bW9yZ2FuLmZyZWVtYW46UGFuY2V0YTE=[\r][\n]"
2018-09-04 09:48:52 DEBUG wire:63 - >> "[\r][\n]"
2018-09-04 09:48:52 DEBUG wire:63 - >> "[\r][\n]"
2018-09-04 09:48:52 DEBUG headers:268 - >> POST /uno/v3/notes/addNote HTTP/1.1
2018-09-04 09:48:52 DEBUG headers:271 - >> Accept: application/json;charset="UTF-8"
2018-09-04 09:48:52 DEBUG headers:271 - >> Accept-Encoding: gzip, deflate
2018-09-04 09:48:52 DEBUG headers:271 - >> Content-Length: 311
2018-09-04 09:48:52 DEBUG headers:271 - >> Content-Type: application/json;charset="UTF-8"
2018-09-04 09:48:52 DEBUG headers:271 - >> Host: localhost:8080
2018-09-04 09:48:52 DEBUG headers:271 - >> Connection: Keep-Alive
2018-09-04 09:48:52 DEBUG headers:271 - >> User-Agent: Apache-HttpClient/4.1.2 (java 1.5)
2018-09-04 09:48:52 DEBUG headers:271 - >> Authorization: Basic bW9yZ2FuLmZyZWVrtetUGFuY2V0YTE=

2018-09-04 09:48:52 DEBUG wire:77 - >> "{"noteUser":"user.user","subject":"Flight ticket issued onlydescription this booking has the flight issued only, please check if any ancillery needs to be booked","description":"GON TEST: ok?this booking has the flight issued only , please check if any ancillery needs to be booked","bookingId":"113301392"}"
2018-09-04 09:49:53 DEBUG DefaultClientConnection:165 - Connection closed

А это запрос. JSON на сервере:

\r\n{"noteUser":"user.user","subject":"Flight ticket issued onlydescription this booking has the flight issued only, please check if any ancillery needs to be booked","description":"GONZALO TEST: ok?this booking has the flight issued only , please check if any ancillery needs to be booked","bookingId":"113301392

enter image description here

Как вы можете видеть на сервере, запрос имеет \ r \ n в начале JSON, и в конце его отсутствует "}. Я думаю, это потому, что для Content-Length установлено значение 311 и как-то 2 символа добавляются в начале JSON (\ r \ n), в конце отсутствуют 2 символа.

У меня отладка до отправки запроса на сервер, и я не могу найти \ r \ n добавлено:

enter image description here enter image description here

  • Я использую grails 3.3.2 и linux на сервере (с разделителем строк linux LF)
  • Клиент выполнен в Java 1.8 и Windows (с разделителем строк Windows CRLF)
  • Джексон, он используется для обработки JSON.
  • Базовая аутентификация выполняется весной.

Я сжал свой мозг, и у меня закончились идеи. Любая помощь будет по достоинству оценена.

Заранее спасибо.

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