2017-10-24 15 views
1

私たちはXMLをJSONに逆シリアル化しようとしています。ほとんどの場合、正常に動作しています。私たちはPOJOに@JacksonXmlPropertyを注釈しました。しかし、問題を引き起こす新しいシナリオがあります。問題は、同じオブジェクトの2つの異なるコレクションを使用することですが、名前は異なります。ここで@JacksonXmlPropertyを使用して、同じオブジェクトの異なる名前のコレクションをデシリアライズする方法はありますか?

は単純化されたXML入力です:

<Invoice> 
    <Payments> 
     <Payment> 
      <Amount> 
     </Payment> 
    </Payments> 
    <Refunds> 
     <Refund> 
      <Amount> 
     </Refund> 
    </Refunds> 
</Invoice> 

このような対応POJOの外観:

public class Invoice { 
    @JacksonXmlElementWrapper(localName = "Payments") 
    protected List<Payment> payments; 

    @JacksonXmlProperty(localName = "Refunds") 
    protected List<Payment> refunds; 
} 

それは例外なくデシリアライズが、払い戻しコレクション内の払い戻しのプロパティはすべてnullであります。

払い戻しPOJOを作成せずにこれを行う方法はありますか?

答えて

0

実際問題はJacksonXMLアノテーションであり、異なるコレクションで同じオブジェクトを使用することではありません。それは、このような正常に動作

public class Invoice { 
    @JacksonXmlElementWrapper(localName = "Payments") 
    protected List<Payment> payments; 

    @JacksonXmlElementWrapper(localName = "Refunds") 
    protected List<Payment> refunds; 
} 

:それはそうのように、同様@JacksonXMLElementWrapperを持っている必要がありますので、払い戻しは、またコレクションです。ちなみに、単純にPaymentを拡張する単純な払い戻しクラスを使用した場合にも機能します。あなたが実際に別のクラスを望む場合。

public class Refund extends Payment { 
} 
関連する問題