Java 使用Jackson将JSON反序列化为JPA管理的实体

Java 使用Jackson将JSON反序列化为JPA管理的实体,java,json,hibernate,jpa,jackson,Java,Json,Hibernate,Jpa,Jackson,当使用Jackson反序列化JPA@实体时,我希望Jackson对托管实例(如果存在)进行操作,然后反序列化该实例上的所有属性;否则将创建一个新的瞬态 假设我在数据库中有一个人: +----+------+--------------+ | id | name | favoriteHero | +----+------+--------------+ | 21 | John | NULL | +----+------+--------------+ 我想反序列化这个JSON {

当使用Jackson反序列化JPA
@实体时,我希望Jackson对托管实例(如果存在)进行操作,然后反序列化该实例上的所有属性;否则将创建一个新的瞬态

假设我在数据库中有一个

+----+------+--------------+
| id | name | favoriteHero |
+----+------+--------------+
| 21 | John | NULL         |
+----+------+--------------+
我想反序列化这个JSON

{
    "id": 21,
    "favoriteHero": "Batman"
}
使用

然后我需要
john
作为JPA管理的实体,首先由
id
从持久性上下文中检索,然后将
favoritehro
设置为蝙蝠侠,以便

可能吗


我尝试使用了一个
JsonDeserializer
,但它会使用从数据库中检索到的实体,而不会继续设置值(如果在数据库中找不到,它也不能退回到默认的反序列化)。

我认为您可以使用GSON来实现这一点,如果这是您的意思: 例如:


我想你可以用GSON来做,如果你是这个意思的话: 例如:


这项工作已经完成。为什么要重新发明轮子。使用。

这已经完成。为什么要重新发明轮子。使用。

我需要坚持使用
Jackson
,因为所有项目都使用它。另外,您提供的示例不会提供托管实体(即从持久性上下文检索)。我需要坚持使用
Jackson
,因为所有项目都使用它。另外,您提供的示例不会提供托管实体(即从持久性上下文检索)。我不能使用
@JsonCreator
,因为我不能将实体代码与数据库层混淆。我不能使用
@JsonCreator
,因为我不能将实体代码与数据库层混淆。我不能更改项目上的整个REST API,我只需要一种Jackson的方式来以兼容JPA的方式反序列化JSON。@MarkOfHall您能提供一些使用Spring Data Rest实现这一点的示例吗?我无法更改项目中的整个Rest API,我只需要一种Jackson方法,以兼容JPA的方式反序列化JSON。@MarkOfHall您能提供一些使用SpringDataREST实现这一点的示例吗?
Person john = objectMapper.readValue(jsonString, Person.class);
john.getId() == 21;
john.getName() == "John";
john.getFavoriteHero() == "Batman";
Gson gson = new GsonBuilder().create();
Person p = gson.fromJson(reader, Person.class);