gpt4 book ai didi

java - XmlHttp 内容序列化程序按字母顺序对字段进行排序

转载 作者:行者123 更新时间:2023-11-30 11:29:48 24 4
gpt4 key购买 nike

我需要严格遵守我的xml文档中元素的顺序。如果我使用 XmlHttpContent 序列化程序来形成 xml 内容,字段将按字母顺序排序。

有没有办法明确指定 xml 中元素的顺序?或者还有其他方法可以使用 xml 主体创建和发布 http 请求吗?

最佳答案

我知道这个答案并不理想,但我最近在尝试使用 http 客户端库序列化到 xml 时遇到了这个问题。我发现可行的解决方案是让我的 DTO 类提供一种方法,将它们转换成某种排序的映射。

在我的例子中,这是一个 ImmutableMap<String, Object>因为我也在使用 Guava但任何具有可控顺序的 map 都可以。基本思想是使用 java 对象来构建数据,但是当需要序列化它们时,您改为序列化 map 。

public interface OrderedXml {
ImmutableMap<String, Object> toOrderedMap();
}

public class Parent implements OrderedXml {
@Key("First") String first;
@Key("Second") String second;
@Key("Child") Child third;

@Override
public ImmutableMap<String, Object> toOrderedMap() {
return ImmutableMap.of(
// the order of elements in this map will be the order they are serialised
"First", first,
"Second", second,
"Child", third.toOrderedMap()
);
}
}

public class Child implements OrderedXml {
@Key("@param1") String param1;
@Key("@param2") String param2;
@Key("text()") String value;

@Override
public ImmutableMap<String, Object> toOrderedMap() {
return ImmutableMap.of(
// the same goes for attributes, these will appear in this order
"@param1", param1,
"@param2", param2,
"text()", value
);
}
}

public class Main {
public static void main(String[] args) {
// make the objects
Parent parent = new Parent();
parent.first = "Hello";
parent.second = "World";
parent.child = new Child();
parent.child.param1 = "p1";
parent.child.param2 = "p2";
parent.child.value = "This is a child";
// serialise the object to xml
String xml = new XmlNamespaceDictionary()
.toStringOf("Parent", parent.toOrderedXml()); // the important part
System.out.println(xml); // should have the correct order
}
}

我知道这个解决方案并不理想,但至少你可以重复使用 toOrderedXml做一个漂亮的toString :-).

关于java - XmlHttp 内容序列化程序按字母顺序对字段进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18126485/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com