2016-03-18 3 views
1

При десериализации JPA @Entity с Джексоном, я бы хотел, чтобы Джексон работал над управляемым экземпляром, если он существует, десериализуя затем все его свойства на нем; в противном случае создается новый переходный.Deserialize JSON в управляемые объекты JPA с Jackson

Скажем, у меня есть Person в базе данных, как:

+----+------+--------------+ 
| id | name | favoriteHero | 
+----+------+--------------+ 
| 21 | John | NULL   | 
+----+------+--------------+ 

И я хочу десериализации этот JSON

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

используя

Person john = objectMapper.readValue(jsonString, Person.class); 

то мне нужно john быть JPA управляемый объект, сначала полученный id от persistence co NTEXT, затем favoriteHero установлен Бэтмен, так что

john.getId() == 21; 
john.getName() == "John"; 
john.getFavoriteHero() == "Batman"; 

Возможно ли это?

Я попытался использовать JsonDeserializer, но он использовал бы извлеченный объект из базы данных и не продолжал бы устанавливать значения (и он не может отступать от десериализации по умолчанию, если не найден в базе данных).

+0

Я не могу использовать '@ JsonCreator', так как я не могу загромождать код сущности с уровнем базы данных. –

ответ

0

Я думаю, что вы можете сделать это с GSON, если это то, что вы имеете в виду: https://github.com/google/gson Пример:

Gson gson = new GsonBuilder().create(); 
Person p = gson.fromJson(reader, Person.class); 
+0

Мне нужно придерживаться 'Jackson', поскольку весь проект использует его. Кроме того, приведенный вами пример не будет предоставлять управляемый объект (т. Е. Извлекается из контекста персистентности). –

0

Это уже сделано. Зачем изобретать колесо. Используйте Spring Data Rest.

+0

Я не могу изменить весь REST API в проекте, мне просто нужен способ Джексона десериализовать JSON JPA-совместимым способом. –

Смежные вопросы