我有一个包含通用列表的类。当我将 Map 放入该通用包装列表中时,JAXB 输出不是我所期望的。显示项目,但不显示其内容。
详细说明:我的课程的简化版本:
@XmlRootElement @XmlSeeAlso({HashMap.class, ArrayList.class, Dummy.class})
public static class TargetClass<T> {
public List<T> wrapped = new ArrayList<>();
}
当包装列表包含一个地图时,结果不是我所期望的。使用:
@GET @Produces(MediaType.APPLICATION_XML)
public TargetClass<Map<String, String>> thisIsWhatIWant() {
Map<String, String> map = new HashMap<>();
map.put("hello", "world");
TargetClass<Map<String, String>> result = new TargetClass<>();
result.wrapped.add(map);
result.wrapped.add(map);
return result;
}
我得到:
<targetClass>
<wrapped xsi:type="hashMap"/>
<wrapped xsi:type="hashMap"/>
</targetClass>
但我希望
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<targetClass>
<wrapped>
<entry>
<key>hello</key>
<value>world</value>
</entry>
</wrapped>
<wrapped>
<entry>
<key>hello</key>
<value>world</value>
</entry>
</wrapped>
</targetClass>
这里有很多很好的 JAXB 答案(感谢@blaise-doughan 和其他人),但据我所知,不是这个。
我尝试过的其他事情:如果我直接使用它们,列表和地图会像我期望的那样被序列化
@GET @Path("baseTest") @Produces(MediaType.APPLICATION_XML)
public BaseTest thisWorksAsExpected() {
BaseTest baseTest = new BaseTest();
baseTest.list.add("item");
baseTest.list.add("item");
baseTest.map.put("hello", "world");
baseTest.map.put("foo", "bar");
return baseTest;
}
输出
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<baseTest>
<list>item</list>
<list>item</list>
<map>
<entry>
<key>hello</key>
<value>world</value>
</entry>
<entry>
<key>foo</key>
<value>bar</value>
</entry>
</map>
</baseTest>
当我将 XMLRootElement 放在那里时,TargetClass 按预期工作:
@XmlRootElement
public static class Dummy {
public String a = "a";
public String b = "b";
}
@GET @Path("other") @Produces(MediaType.APPLICATION_XML)
public TargetClass<Dummy> other() {
TargetClass<Dummy> result = new TargetClass<>();
result.wrapped.add(new Dummy());
result.wrapped.add(new Dummy());
return result;
}
输出:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<targetClass>
<wrapped xsi:type="dummy">
<a>a</a>
<b>b</b>
</wrapped>
<wrapped xsi:type="dummy">
<a>a</a>
<b>b</b>
</wrapped>
</targetClass>
有什么线索吗?
格罗滕,
弗里索