クラス Foo (永続化可能) を flexjson を使用して JSON にシリアライズしたいと思います (必要な機能をサポートする他のライブラリを知っている場合は、声を上げてください)。クラス Bar と FooBar への依存参照を含めたいのですが、主キー (@Id) を表すフィールドのみが必要です。これはすべての永続クラスに対して手動で実行できることはわかっていますが、もっと良い方法があると確信しています。
これが私のクラス表現の例です:
@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();