Пользовательское отображение Джексона для внутренних классов - PullRequest
1 голос
/ 06 июля 2011

Я разрабатываю приложение Spring MVC, которое использует Джексона для представлений JSON.Предположим, что у меня есть два класса, например, следующие.

class A {
   String prop;
   B other;
   // getters setters
}

class B {
   Integer id;
   String name;
}

Я пытаюсь найти строку JSON, подобную следующейдля полностью инициализированного экземпляра A

{prop:"something", name:"otherthing"} // in here the class B 
                                      // is replaced with its propery name

вместо

{prop:"something, other:{id:5,name:"otherthing"}}

ПРИМЕЧАНИЕ. Два упомянутых выше класса являются классами сущностей для Hibernate.Я использовал @JsonIgnore, чтобы исключить некоторые свойства из вывода JSON. Можно ли заменить подкласс своим свойством с помощью аннотации?

Ответы [ 2 ]

2 голосов
/ 06 июля 2011

Это пока невозможно, кроме как с помощью пользовательского сериализатора, хотя есть запрос функции (http://jira.codehaus.org/browse/JACKSON-132), который может сделать это в Jackson 1.9 (так как он имеет относительно высокий подсчет голосов, что означает, что несколько пользователей действительнохотелось бы, чтобы это было реализовано).

0 голосов
/ 06 июля 2011

Если вы можете использовать библиотеку, отличную от Джексона, для сериализации JSON, то вы можете использовать GSON (http://code.google.com/p/google-gson/) с пользовательским объектом GsonBuilder, который может приблизить вас к тому, что вы пытаетесь достичь.

Если вы прочитаете сообщение в блоге , в нем показано, как настроить сериализатор GSON несколькими различными способами. Я использую его с пользовательской стратегией ExclusionStrategy для правильного перевода объектов моей модели (которыеполный циклических ссылок) на JSON для веб-сервиса RESTful, использующего Spring MVC (обратите внимание, что я использую его только для сериализации, а не для десериализации.)

У меня настроен мой GsonBuilder внутри различных bean-компонентов View,которую вы можете увидеть здесь . Если это похоже на то, что это может помочь вам, и у вас есть какие-либо вопросы, дайте мне знать.

...