与json共享引用

时间:2013-05-21 09:05:28

标签: json jaxb eclipselink moxy

是否可以利用JSON作为输出模式的共享引用的概念?我读了这篇文章http://blog.bdoughan.com/2010/10/jaxb-and-shared-references-xmlid-and.html),但是将我的JAX-RS上的@Produces更改为JSON会强制进行无限循环。基本上我想将一个对象减少到它的id:

public class Foo {
    private long id;
    private String someText;
    private Bar bar;
}

我想要这样绑定这样的实例:

{
    "id": 1234,
    "someText": "lorem",
    "bar_id": 9876
}

这是我想要避免的:

{
    "id": 1234,
    "someText": "lorem",
    "bar": {
        "id": 9876,
        "anotherText": "ipsum"
    }
}

1 个答案:

答案 0 :(得分:1)

注意:我是EclipseLink JAXB (MOXy)主管,是JAXB (JSR-222)专家组的成员。

使用MOXy作为您的JSON绑定提供程序,您引用的shared references帖子(来自我的博客)将适用于JSON,就像它对XML一样。由于您在下面使用JAX-RS,因此在该环境中配置MOXy的示例如下:

使用@XmlID / @XmlIDREF时,预计由其ID引用的对象也存在于文档中。由于这不是您的使用案例,因此最好使用XmlAdapterXmlAdapter的签名类似于:

public class BarAdapter extends XmlAdapter<Integer, Bar> {
    ...
}

XmlAdapter中,您将负责在元帅期间从Bar的实例返回ID,并根据Bar返回id的实例在一个unmarshal期间。