杰克逊解析XML

huangapple go评论91阅读模式
英文:

Jackson parsing XML

问题

I'm trying to serialize POJO class to Amazon XML format to aggregate the date from the service.

The goal is to have an xml like:

  1. <ShipmentEventList>
  2. <ShipmentEvent>
  3. <ShipmentItemList>
  4. <ShipmentItem></ShipmentItem>
  5. </ShipmentItemList>
  6. <AmazonOrderId>AAAA</AmazonOrderId>
  7. <PostedDate>BBBB</PostedDate>
  8. <MarketplaceName>CCCC</MarketplaceName>
  9. <SellerOrderId>DDDD</SellerOrderId>
  10. </ShipmentEvent>
  11. </ShipmentEventList>

Here are my POJO classes

ShipmentEventList

  1. public class ShipmentEventList {
  2. @JacksonXmlElementWrapper(localName = "ShipmentEventList")
  3. @JacksonXmlProperty(localName = "ShipmentEvent")
  4. private List<ShipmentEvent> shipmentEventList;
  5. }

ShipmentEvent

  1. @JacksonXmlRootElement(localName = "ShipmentEvent")
  2. public class ShipmentEvent {
  3. @JacksonXmlElementWrapper(localName = "ShipmentItemList")
  4. private List<ShipmentItem> shipmentItemList;
  5. @JacksonXmlProperty(localName = "AmazonOrderId")
  6. private String amazonOrderId;
  7. @JacksonXmlProperty(localName = "PostedDate")
  8. private String postedDate;
  9. @JacksonXmlProperty(localName = "MarketplaceName")
  10. private String marketplaceName;
  11. @JacksonXmlProperty(localName = "SellerOrderId")
  12. private String sellerOrderId;
  13. }

Unfortunatelly, as a result of the serialization I have:

  1. <ShipmentEventList>
  2. <ShipmentEventList>
  3. <ShipmentEvent>
  4. <AmazonOrderId>A</AmazonOrderId>
  5. <PostedDate>B</PostedDate>
  6. <MarketplaceName>C</MarketplaceName>
  7. <SellerOrderId>D</SellerOrderId>
  8. </ShipmentEvent>
  9. <ShipmentEvent>
  10. <AmazonOrderId>B</AmazonOrderId>
  11. <PostedDate>C</PostedDate>
  12. <MarketplaceName>D</MarketplaceName>
  13. <SellerOrderId>E</SellerOrderId>
  14. </ShipmentEvent>
  15. </ShipmentEventList>
  16. </ShipmentEventList>

Could you explain me how does the serialization of collections work in Jackson?

英文:

I'm trying to serialize POJO class to Amazon XML format to aggregate the date from the service.

The goal is to have an xml like:

  1. <ShipmentEventList>
  2. <ShipmentEvent>
  3. <ShipmentItemList>
  4. <ShipmentItem></ShipmentItem>
  5. </ShipmentItemList>
  6. <AmazonOrderId>AAAA</AmazonOrderId>
  7. <PostedDate>BBBB</PostedDate>
  8. <MarketplaceName>CCCC</MarketplaceName>
  9. <SellerOrderId>DDDD</SellerOrderId>
  10. </ShipmentEvent>
  11. </ShipmentEventList>

Here are my POJO classes

ShipmentEventList

  1. public class ShipmentEventList {
  2. @JacksonXmlElementWrapper(localName = "ShipmentEventList")
  3. @JacksonXmlProperty(localName = "ShipmentEvent")
  4. private List<ShipmentEvent> shipmentEventList;
  5. }

ShipmentEvent

  1. @JacksonXmlRootElement(localName = "ShipmentEvent")
  2. public class ShipmentEvent {
  3. @JacksonXmlElementWrapper(localName = "ShipmentItemList")
  4. private List<ShipmentItem> shipmentItemList;
  5. @JacksonXmlProperty(localName = "AmazonOrderId")
  6. private String amazonOrderId;
  7. @JacksonXmlProperty(localName = "PostedDate")
  8. private String postedDate;
  9. @JacksonXmlProperty(localName = "MarketplaceName")
  10. private String marketplaceName;
  11. @JacksonXmlProperty(localName = "SellerOrderId")
  12. private String sellerOrderId;
  13. }

Unfortunatelly, as a result of the serialization I have:

  1. <ShipmentEventList>
  2. <ShipmentEventList>
  3. <ShipmentEvent>
  4. <AmazonOrderId>A</AmazonOrderId>
  5. <PostedDate>B</PostedDate>
  6. <MarketplaceName>C</MarketplaceName>
  7. <SellerOrderId>D</SellerOrderId>
  8. </ShipmentEvent>
  9. <ShipmentEvent>
  10. <AmazonOrderId>B</AmazonOrderId>
  11. <PostedDate>C</PostedDate>
  12. <MarketplaceName>D</MarketplaceName>
  13. <SellerOrderId>E</SellerOrderId>
  14. </ShipmentEvent>
  15. </ShipmentEventList>
  16. </ShipmentEventList>

Could you explain me how does the serialization of collections work in Jackson?

答案1

得分: 1

你需要将 useWrapping 标志设置为 false

  1. class ShipmentEventList {
  2. @JacksonXmlElementWrapper(useWrapping = false)
  3. @JacksonXmlProperty(localName = "ShipmentEvent")
  4. private List<ShipmentEvent> shipmentEventList;
  5. }
英文:

You need to set useWrapping flag to false:

  1. class ShipmentEventList {
  2. @JacksonXmlElementWrapper(useWrapping = false)
  3. @JacksonXmlProperty(localName = &quot;ShipmentEvent&quot;)
  4. private List&lt;ShipmentEvent&gt; shipmentEventList;
  5. }

huangapple
  • 本文由 发表于 2020年9月22日 21:33:42
  • 转载请务必保留本文链接:https://go.coder-hub.com/64010880.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定