2013-04-16 1 views
1

Я хотел бы сериализовать класс Foo (который может быть сохранен) в JSON с использованием flexjson (если вы знаете какую-либо другую библиотеку, которая поддерживает требуемые функции, пожалуйста, говорите). Я хотел бы включить в себя ссылку на класс Bar и FooBar, но мне нужны только поля, представляющие первичный ключ (@Id). Я знаю, что это можно сделать вручную для каждого устойчивого класса, но я уверен, что есть лучший способ.Как сериализовать привязанные постоянные классы к JSON только с использованием первичных ключей

Вот пример моего класса представления:

@Entity 
public class Foo { 
    @Id @GeneratedValue(...) 
    private Long id; 
    private String someField; 
    @ManyToOne 
    private Bar bar; 
    @OneToMany 
    private Collection<FooBar> fooBars 
} 
@Entity 
public class Bar { 
    @Id @GeneratedValue(...) 
    private long id; 
    private String irrelevantField 
    @OneToMany 
    private Collection<Foo> foos; 
} 
@Entity 
public class FooBar { 
    @Id @GeneratedValue(...) 
    private Long id; 
    private String irrelevantField 
} 

Вот вывод, что я искал, когда сериализации класса Foo:

{ 
    "id":1, 
    "someField":"someValue", 
    "bar":1,     // or "bar":{"id":1} 
    "fooBars":[1,2,3,4,5]  // or "fooBars":[{"id":1}, {"id":2}, ...] 
} 

и при сериализации класса Bar:

{ 
    "id":1, 
    "irrelevantField":"someValue", 
    "foos":[1,2,3,4,5]  // or "foos":[{"id":1}, {"id":2}, {"id":3}, ...] 
} 

Я нашел временное решение, но я все еще ищу «правильное/лучшее» решение

new JSONSerializer().include("bar.id", "fooBars.id").exclude("bar.*", "fooBars.*").serialize((Foo)this).toString(); 

ответ

0

Вы можете использовать JAXB аннотаций (и настроить JSon анализатор использовать JAXB аннотаций инспектор - что может быть значение по умолчанию). С помощью этих аннотаций вы можете добавить @XmlTransient на поля, которые вы не хотите.

+0

Это не сработает в моем случае. Я хочу, чтобы все поля включались, когда я сериализую этот класс (назовем его Foo). Но когда я сериализую класс, имеющий ссылку на Foo, я хочу включать только поля, которые определяют первичный ключ (и аннотируются с помощью @Id) – mitjap