我有以下问题:有两个类:
public class Order {
@JsonProperty("customer_id")
private UUID customerId;
@JsonProperty("id")
private UUID id;
@JacksonXmlElementWrapper(localName = "products")
private List<Item> items;
}
public class Item {
@JsonProperty("id")
private UUID productId;
@JsonProperty("quantity")
private Integer quantity;
}
我正在尝试将它们导出到 XML,反之亦然:
public class OrderXmlConverter {
public static String convertToXml(Order order) throws IOException {
/*изначально был такой метод, немного его дополнил по советам из гайда
на baeldung, но не помогло:
XmlMapper xmlMapper = new XmlMapper();
return xmlMapper.writeValueAsString(order);*/
XmlMapper xmlMapper = new XmlMapper();
ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
xmlMapper.writeValue(byteArrayOutputStream, order);
return byteArrayOutputStream.toString();
}
public static Order convertFromXml(String xml) throws JsonProcessingException {
XmlMapper xmlMapper = new XmlMapper();
xmlMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
return xmlMapper.readValue(xml, Order.class);
}
}
基本上,我使用 Jackson 来完成此操作,但产品块中的元素始终以不同的顺序保存。即: 首次启动:
<Order>
<products>
<items>
<id>2d1518c0-cc3d-4046-926b-0e17a26dedb7</id>
<itemIdAndQuantitysAsString>id: 2d1518c0-cc3d-4046-926b-0e17a26dedb7 quantity: 1,</itemIdAndQuantitysAsString>
<quantityOfItem>1</quantityOfItem>
<quantity>1</quantity>
</items>
</products>
<productsAndQuantityAsString>id: 2d1518c0-cc3d-4046-926b-0e17a26dedb7 quantity: 1,</productsAndQuantityAsString>
<products>
<products>
<id>2d1518c0-cc3d-4046-926b-0e17a26dedb7</id>
<itemIdAndQuantitysAsString>id: 2d1518c0-cc3d-4046-926b-0e17a26dedb7 quantity: 1,</itemIdAndQuantitysAsString>
<quantityOfItem>1</quantityOfItem>
<quantity>1</quantity>
</products>
</products>
<customer_id>de8ce59a-f226-457d-8f08-1be7b0097a03</customer_id>
<id>c088babc-fea4-48d9-8346-c381fdeff555</id>
</Order>
第二次运行:
<Order>
<products>
<items>
<id>394db20c-693b-407a-9fe8-9c7cc18d6797</id>
<quantityOfItem>1</quantityOfItem>
<itemIdAndQuantitysAsString>id: 394db20c-693b-407a-9fe8-9c7cc18d6797 quantity: 1,</itemIdAndQuantitysAsString>
<quantity>1</quantity>
</items>
</products>
<productsAndQuantityAsString>id: 394db20c-693b-407a-9fe8-9c7cc18d6797 quantity: 1,</productsAndQuantityAsString>
<products>
<products>
<id>394db20c-693b-407a-9fe8-9c7cc18d6797</id>
<quantityOfItem>1</quantityOfItem>
<itemIdAndQuantitysAsString>id: 394db20c-693b-407a-9fe8-9c7cc18d6797 quantity: 1,</itemIdAndQuantitysAsString>
<quantity>1</quantity>
</products>
</products>
<customer_id>91c0cc94-21cb-4ac9-94bd-8c380b93d1be</customer_id>
<id>8401d4c0-bbac-4006-9760-75e9b6d7d628</id>
</Order>
理论上,这不会困扰我;视觉上我确保数据正确导出和导入。但在测试中,我计划手动生成预期的字符串并进行比较,但这就是问题开始的地方:因为。当元素的顺序发生变化时,有效的 XML 字符串通常会被标记为无效。
问题:如何为 XML 对象设置严格的元素顺序?还有一个小问题:为什么我的产品重复,但在一种情况下,元素被称为项目,通过变量的名称,而在另一种情况下,元素被称为产品,通过包装器的本地名称?我预计只会有第二个街区。