Gson JSON Output содержит пробелы в именах полей после преобразования - PullRequest
0 голосов
/ 19 октября 2018

У меня необычная ситуация.Кодированный вывод содержит json с пробелом между каждым символом.

{ " f o r m " : { " s a m p l e F i e l d " : " s a m p l e v a l u e " } }

У нас есть приложение Spring mvc и выполняется запрос POST к одному из наших контроллеров.Поля в запросе POST заполняются в POJO из параметров запроса.Из наших журналов видно, что между буквами нет пробелов. Мы передаем наш POJO напрямую в общий экземпляр Gson в нашем классе обслуживания (многие запросы и фоновые потоки кварца используют этот экземпляр) .Переменная преобразователя Gson создается следующим образом:

Gson gsonMaker = new GsonBuilder().setDateFormat("MM dd, yyyy").create();

Это довольно случайно (1 случай из 100). Запросить указатели.Мы храним вывод JSON в базе данных Oracle 11g.Из моего прочтения на других постах и ​​поиске в Google Gson, кажется, безопасен для потоков.

Пожалуйста, помогите.

1 Ответ

0 голосов
/ 24 декабря 2018

После тщательного анализа была обнаружена проблема с файлом jar драйвера ojdbc6.Оказывается, что у драйвера есть проблема с полем CLOB, и это происходит только с 8000 символов.Последовательность воспроизведения этой проблемы следующая.

  1. Создание таблицы базы данных в Oracle со столбцом CLOB
  2. Запись в строку ровно 8000 символов.
  3. Вставкастроковые данные в поле CLOB.
  4. Считайте вставленные данные, используя resultset.getString ("CLOB_FIELD")
  5. Теперь при считывании данных на шаге 4 символы будут чередоваться с символами NUL (\ u0000).

Наш DAL, использующий режим гибернации, извлекал данные CLOB и снова сохранял их в БД.Эта перезапись 8000 символов обратно в базу данных привела к путанице, что это может произойти из-за Гсона.

Есть пара вопросов, на которые я пытаюсь найти ответ.

  1. Если Hibernate Entity помечен @Lob (который сохраняет данные CLOB), почему Hibernate по-прежнему предпочитает читать его как строку, вызывающую повреждение прочитанных данных?Разве hibernate не должен обрабатывать это?
  2. Эта проблема встречается редко и обсуждалась в этой теме здесь , но я не нашел упоминания об исправлении в последних драйверах (я покапроверить это для последних драйверов).

Надеюсь, что люди находят эту тему полезной.

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