2015-05-15 78 views
0

我有一個澤西客戶端,打電話給第三方休息API並檢索一些JSON。澤西島 - Moxy返回類屬性中的附加JSON

{"A":1,"W":2,"List":[{"name":"John","amount":10.0}]} 

之後,我需要將這個JSON添加到我的響應類中,並將其返回給響應。

@XmlRootElement 
public class MyResponse { 

    private JsonObject body; 
    private String status; 

我設法分配一個來自第三方的API來body但是這發出的響應值是這樣的:

{ 
"status": "success", 
"body": { 
"entry": [ 
    { 
    "key": "A", 
    "value": 1 
    } , 
    { 
    "key": "W", 
    "value": 2 
    }, 
    { 
    "key": "List", 
    "value": "[{\"name\":\"John\",\"amount\":10.0}]" 
    } 
] 
} 
} 

因此,有兩個主要問題,MOXY正在產生keyvalue元素,而我希望它是key: value,並且它不會正確生成由API提供的JSON結構中的第二級對象。

回答

1

MOXy是JAXB的實現,而JsonObject是JSON-P的一部分。 MOXy恰好也能夠處理JSON,但這是JAXB標準的專有擴展。據我所知,JSON-P和JAXB之間沒有可用的默認映射。您看到那些key/value條目的原因必須是因爲JsonObject延伸了java.util.Map,因此您將獲得該類型的默認MOXy映射。

我覺得你有以下幾種可能:

  1. 轉到與任何JSON-P或JAXB /莫西(莫西其額外的JSON結合所必需的)
  2. 使用其中一種JAXB/MOXy機制將自定義類型映射到JAXB。標準的方法是使用XmlAdapter,處理Map的示例尤其是herehere。但是如果你不知道第三方JSON內容的結構並想保持嵌套級別不變,那麼我認爲這會很困難。

另一種可能性是使用像傑克遜這樣的專有API,但我無法幫忙。