десериализация сущностей с отношениями - PullRequest
2 голосов
/ 16 марта 2011

Мы получаем JSON, который выглядит следующим образом:

{ name: "john", surname: "smith", company: "1234342" }

Наша клиентская среда также может обрабатывать отношения между объектами, и компания сопоставляется с ее идентификатором.

У нас есть клиент Hibernate, у которого есть член компании, который является родственником другой компании.

Мы используем @RequestMapping method(@RequestBody Customer c) Spring для обработки запросов и десериализации сущностей, но мы не можем десериализовать предоставленный JSON. Hibernate не знает, как построить Компанию из Строки, несмотря на то, что Строка является ее первичным ключом.

Очень легко сериализовать сущности из Hibernate в JSON, но десериализация кажется другой историей.

Есть ли какой-нибудь шаблон / конструкция, чтобы справиться с тем, чего мы хотим достичь? Кто-нибудь может указать мне правильное направление?

Ответы [ 2 ]

2 голосов
/ 16 марта 2011

Самое простое решение - иметь две отдельные модели классов, одну для Hibernate и одну для JSON, и при необходимости конвертировать между ними.

Это не очень элегантно, поэтому Джексон (который является реализацией JSON, используемой Spring) предоставляет механизм расширения (называемый Modules ), который, в свою очередь, позволяет регистрировать пользовательскую десериализацию логика (т.е. как превратить токены JSON в объекты Java). Посмотрите на это, посмотрите, работает ли оно для вас.

Затем вам необходимо настроить Джексона в контексте Spring , чтобы использовать пользовательский преобразователь.

0 голосов
/ 16 марта 2011

Я думаю, Dozer было бы идеально для такой сериализации / десериализации. Если вы получаете структуру JSON в качестве карты, вы можете указать dozer преобразовать эту карту в соответствующий объектный объект.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...