如何仅使用主键将引用的持久化类序列化为JSON

时间:2013-04-16 10:17:44

标签: java json jpa flexjson

我想使用flexjson将类Foo(可以持久化)序列化为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(); 

1 个答案:

答案 0 :(得分:0)

您可以使用JAXB注释(并配置您的json解析器以使用JAXB Annotation检查器 - 这可能是默认值)。使用这些注释,您可以在不需要的字段上添加@XmlTransient