当用Jackson反序列化JPA @Entity
时,我希望Jackson能够在托管实例上运行,如果存在,则将其所有属性反序列化;否则会创建一个新的瞬态。
假设我在数据库中有一个Person
:
+----+------+--------------+
| id | name | favoriteHero |
+----+------+--------------+
| 21 | John | NULL |
+----+------+--------------+
我想反序列化这个JSON
{
"id": 21,
"favoriteHero": "Batman"
}
使用
Person john = objectMapper.readValue(jsonString, Person.class);
然后我需要john
作为JPA管理实体,首先由id
从持久化上下文中检索,然后将favoriteHero
设置为 Batman ,这样
john.getId() == 21;
john.getName() == "John";
john.getFavoriteHero() == "Batman";
有可能吗?
我尝试使用JsonDeserializer
,但它会使用数据库中检索到的实体而不继续设置值(如果在数据库中找不到,则无法回退到默认的反序列化)。
答案 0 :(得分:0)
我认为你可以用GSON做到这一点,如果这是你的意思:https://github.com/google/gson 例如:
Gson gson = new GsonBuilder().create();
Person p = gson.fromJson(reader, Person.class);
答案 1 :(得分:0)
这已经完成了。为什么重新发明轮子。使用Spring Data Rest。