1

クラス 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(); 
4

1 に答える 1

0

注釈を使用できJAXBます (そして、JAXB 注釈インスペクターを使用するように json パーサーを構成します - これはデフォルト値である可能性があります)。@XmlTransientこれらの注釈を使用すると、不要なフィールドを追加できます。

于 2013-04-16T16:12:44.997 に答える