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