Сериализация Джексона, есть ли аннотация, которая указывает, какие подчиненные свойства использовать для свойства? - PullRequest
0 голосов
/ 13 октября 2011

Я бы хотел увидеть что-то подобное

class User {
   @JsonMask({"name", "address"})
   private Company company;
   private String name;
   //...
}
class Company {
   private String name;
   private String address;
   private Set<User> employers;
   //...
}

когда пользователь сериализуется, вывод должен быть

{"name": "Mike", "company": {"name": "Enterprise Co.Ltd", "address": "....." }}

, а дорогостоящая часть Set<User> и другие подчиненные свойства безопасно игнорируются.

Я пока не совсем знаком с Джексоном и нашел только @JsonIgnore на помощь, но тогда я бы навсегда потерял все эти свойства @JsonIgnored. Есть ли элегантный способ решить эту проблему?

Примечание: я использую Hibernate JPA, поэтому в моих классах Model есть много отношений, с цепочками глубоких отношений и даже циклическими ссылками, поэтому полная сериализация JSON всегда приведет к черту ... Я заглянул в @JsonManagedRef и друг, но это только решает циклическую проблему, приводит к большому количеству настроек и не очень читабельно.

1 Ответ

0 голосов
/ 12 ноября 2011

нашел только @JsonIgnore для спасения, но тогда я бы навсегда потерял все эти свойства @JsonIgnored

Под этим я понимаю, что вы хотите, чтобы нежелательные Company свойства былиигнорируется только при сериализации User, в отличие от того, что должно происходить при сериализации в противном случае Company, например, напрямую.

Если возможно использовать разные экземпляры сериализатора, то есть два разных экземпляра ObjectMapper,затем один из подходов к решению этой проблемы при сериализации User заключается в использовании смешанного для применения @JsonIgnore в зависимости от ситуации.Тогда не используйте тот же сериализатор и смешивание при сериализации Company.

. Если необходим только один сериализатор, то необходима пользовательская сериализация.

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