杰克逊:将部分原始邮件保存到jsonb

时间:2019-03-20 14:49:17

标签: java spring postgresql jackson jsonb

我收到一个json消息。我反序列化大多数字段,但是有一个字段我不需要反序列化,但是我必须保存到db中。它可以是任何json对象:

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

所以我将其反序列化为

int important_field;
JsonObject unimportant;

,现在我需要将其保存到postgres。 unimportant字段映射为jsonb。当然,当我尝试使用spring保存它时:

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

我得到:

  

PSQLException:无法推断用于com.fasterxml.jackson.databind.node.ObjectNode实例的SQL类型。将setObject()与显式的Types值一起使用以指定要使用的类型。

我该如何保存?我必须手动序列化unimportant字段吗?还是有一些更好的反序列化消息的方法,这种方法更易于保存?

1 个答案:

答案 0 :(得分:0)

是的,您必须先将其序列化为字符串,然后使用显式类型转换/转换:

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

由于JSON仍然是文本格式,因此,如果驱动程序为您执行此操作,则不会带来性能优势。