Джексон: сохранение части исходного сообщения в jsonb - PullRequest
0 голосов
/ 20 марта 2019

Я получаю сообщение JSON.Я десериализирую большинство полей, но есть одно поле, которое мне не нужно десериализовать, но я должен сохранить в БД.это может быть любой объект json:

{
  "important_field": 123,
  "unimportant" : {...}
}

, поэтому я десериализую его как

int important_field;
JsonObject unimportant;

и теперь мне нужно сохранить его в postgres.Поле unimportant отображается как jsonb.и, конечно, когда я пытаюсь сохранить его, используя spring:

jdbcTemplate.batchUpdate("insert into my_table (default, ?,?)", list)

, я получаю:

PSQLException: Невозможно определить тип SQL для использования с экземпляром com.fasterxml.jackson.databind.node.ObjectNode.Используйте setObject () с явным значением Types, чтобы указать используемый тип.

как я могу сохранить его?мне нужно вручную сериализовать поле unimportant?или, может быть, есть какой-то лучший способ десериализации сообщения, которое будет легче сохранить?

1 Ответ

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

Да, вы должны сериализовать его до строки, а затем использовать явное приведение / преобразование типов:

jdbcTemplate.batchUpdate("insert into my_table (default, ?, ?::jsonb)", list)

Поскольку JSON в любом случае является текстовым форматом, производительность не улучшится, если драйвер сделает это за вас.

...