使用JAXB序列化为xml或json时更改json格式

时间:2015-08-07 09:52:30

标签: java json jaxb

我有一个Java应用程序,它使用Accept头来返回XML或Json,具体取决于客户端请求(到RESTful API)。我们注意到虽然XML正在回归,但我们希望json有点奇怪。抱歉,这有点令人费解,但我试图添加所有相关的例子和代码/注释。任何有助于理解json返回原因的帮助都会非常感激。

所以xml是

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<organisation id="6430D28827FD" href="http://domain.com:80/app/api/organisations/6430D28827FD" created="2014-07-11T11:36:37+01:00">
**<links>
    <link href="http://domain.com:80/app/api/orders/E24B07A4" rel="ORDER"/>
    <link href="http://domain.com:80/app/api/orders/FA423645" rel="ORDER"/>
    ...
</links>**
<name>Acme Ltd</name>

当输出是在json但我们得到

{
    **"links": {
        "link": [
            {
                "href": "http://domain.com:80/app/api/orders/E24B07A4",
                "rel": "ORDER",
                "otherAttributes": {}
            },
            {
                "href": "http://domain.com:80/app/api/orders/FA423645",
                "rel": "ORDER",
                "otherAttributes": {}
            },
            ...
    ]**
},
"id": "6430D28827FD",
"href": "http://domain.com:80/app/api/organisations/6430D28827FD",
"created": 1405074997000,
"name": "Acme Ltd",
}

}

我们(想想我们!)希望看到

    "links": { [
            {
                "href": "http://domain.com:80/app/api/orders/E24B07A4",
                "rel": "ORDER",
                "otherAttributes": {}
            },
            {
                "href": "http://domain.com:80/app/api/orders/FA423645",
                "rel": "ORDER",
                "otherAttributes": {}
            },
            ...
         ]
     }

有没有办法做到这一点(或者我们错过了关于如何构建json的观点?)

代码如下

@XmlRootElement(name = "organisations")
@XmlAccessorType(value = XmlAccessType.PROPERTY)
public class OrganisationsBean {
    @XmlElement(name = "organisation")
    private List<OrganisationBean> organisations;

    private OrganisationsBean() {
    }

    public OrganisationsBean(List<OrganisationBean> organisations) {
       this.organisations = organisations;
    }

    public List<OrganisationBean> getOrganisations() {
        return organisations;
    }
}
@XmlType(name = "organisation", propOrder = {"name", …
public class OrganisationBean extends ResourceBean {
    private String name;

    public OrganisationBean() {}

    public static OrganisationBean create(String organisationId, String   organisationName, HttpServletRequest request) {
        OrganisationBean organisationBean = new     OrganisationBean(organisationId);
        organisationBean.setName(organisationName);
…

        return organisationBean;
    }
}
public class Organisation {
    private String id;
    private String name;
    private List<OrderSummary> orderSummaries;
    …

    public Organisation(String id, String name) {
        this.id = id;
        this.name = name;
    }

    public void setOrderSummaries(List<OrderSummary> orderSummaries) {
        this.orderSummaries = orderSummaries ;
    }
    public List<OrderSummary> getOrderSummaries() {
        return orderSummaries ;
    }
}
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "links", propOrder = {"link"})
public class Links {
    protected List<Link> link;

    public List<Link> getLink() {
        if (link == null) {
            link = new ArrayList<Link>();
        }
        return this.link;
    }
}

0 个答案:

没有答案