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