2014-07-21 40 views
2

我有一個簡單的Web服務,它使用並生成一些XML和JSON格式的bean。然後,我有一個包含對象的集合豆:將對象集合序列化爲JSON和XML

@XmlRootElement 
@XmlAccessorType(XmlAccessType.FIELD) 
public class Company { 

    @XmlElementWrapper(name = "addresses") 
    @XmlElement(name = "address") 
    private Collection<Address> addresses; 
    ... 
} 

@XmlRootElement 
@XmlAccessorType(XmlAccessType.FIELD) 
public class Address{ 
    private String street; 
    private String city; 
    private String country; 
    ... 
} 

系列化後,我有這樣的XML:

<company> 
<addresses> 
    <address> 
     <street>Testowa 1A</street> 
     <city>Warszawa</city> 
     <country>Polska</country> 
    </address> 
    <address> 
     <street>Testowa 2A</street> 
     <city>Warszawa</city> 
     <country>Polska</country> 
    </address> 
</addresses> 
</company> 

這是正確的和JSON:

"company" : { 
    "addresses": { 
    "address": [ {"street": "Testowa 1A", "city": "Warszawa", "country": "Polska"} ], 
    "address": [ {"street": "Testowa 2A", "city": "Warszawa", "country": "Polska"} ] 
    } 
} 

問題是與JSON。我的Web服務用戶無法接受序列化集合的符號。他們需要類似的東西:

"company" : { 
    "addresses": [ 
    {"street": "Testowa 1A", "city": "Warszawa", "country": "Polska"}, 
    {"street": "Testowa 2A", "city": "Warszawa", "country": "Polska"} 
    ] 
} 

如果我刪除@XmlElementWrapper我會JSON,我需要,但後來我的XML將是不正確的(沒有「地址」標籤):

<company> 
    <address> 
    <street>Testowa 1A</street> 
    <city>Warszawa</city> 
    <country>Polska</country> 
    </address> 
    <address> 
    <street>Testowa 2A</street> 
    <city>Warszawa</city> 
    <country>Polska</country> 
    </address> 
</company> 

任何想法如何滿足這兩個要求?

+0

對不起復制/粘貼例外檢查現在 –

+0

顯示美國'Address'。你使用哪些JAXB註釋? –

+0

...
...

回答

1

JAXB (JSR-222)本身並不包括如何將對象轉換爲/從JSON。這意味着答案將取決於您正在使用的JSON綁定實現,它目前正在解釋JAXB註釋。

EclipseLink JAXB (MOXy)我們提供了JSON綁定運行時屬性,名爲JSON_WRAPPER_AS_ARRAY_NAME,可以啓用您正在查找的行爲。

+1

這是它秒。謝謝。 –

+0

現在我有另一個問題。當我想給具有單一元素數組的請求我必須做的是這樣的: 「地址」:{ \t \t「地址」:{ \t \t \t \t「城市」:「華沙」, \t \t \t \t 「國」: 「波蘭」, \t \t \t \t 「街頭」: 「Testowa 1A」, \t \t \t \t} \t \t \t}。序列化看起來是正確的:「地址」:[{}] –

+0

好吧,我已經創建了另一個問題, –