Java 如何使用嵌套列表反序列化xml?
如何读取包含嵌套列表的xml响应? 以下选项无效,表示嵌套列表始终为空。为什么?Java 如何使用嵌套列表反序列化xml?,java,xml,spring,jackson,jaxb,Java,Xml,Spring,Jackson,Jaxb,如何读取包含嵌套列表的xml响应? 以下选项无效,表示嵌套列表始终为空。为什么? JacksonXmlModule xmlMod = new JacksonXmlModule(); xmlMod.setDefaultUseWrapper(false); ObjectMapper m = (new Jackson2ObjectMapperBuilder()) .createXmlMapper(true) .modules(x
JacksonXmlModule xmlMod = new JacksonXmlModule();
xmlMod.setDefaultUseWrapper(false);
ObjectMapper m = (new Jackson2ObjectMapperBuilder())
.createXmlMapper(true)
.modules(xmlMod, new JaxbAnnotationModule())
.build();
PersonResponse rsp = m.readValue(ReaderUtil.read("person.xml"), PersonResponse.class)
//all fields having getter + setter, omitted for readability
@XmlRootElement
public class PersonResponse {
@XmlElement(required = true)
private Persons persons;
@XmlAccessorType(XmlAccessType.FIELD)
public static class Persons {
@XmlElement(required = true)
List<Person> person;
@XmlAccessorType(XmlAccessType.FIELD)
public static class Person {
@XmlAttribute(name="firstname", required=true)
private String firstname;
}
}
}
JacksonXmlModule xmlMod=新的JacksonXmlModule();
xmlMod.setDefaultUseWrapper(false);
ObjectMapper m=(新的Jackson2ObjectMapperBuilder())
.createXmlMapper(true)
.modules(xmlMod,新的JaxbAnnotationModule())
.build();
PersonResponse rsp=m.readValue(ReaderUtil.read(“person.xml”),PersonResponse.class)
//所有具有getter+setter的字段,为了可读性而省略
@XmlRootElement
公共类人员响应{
@XmlElement(必需=true)
私人;
@XmlAccessorType(XmlAccessType.FIELD)
公众人士{
@XmlElement(必需=true)
名单上的人;
@XmlAccessorType(XmlAccessType.FIELD)
公共静态类人员{
@XmlAttribute(name=“firstname”,必需=true)
私有字符串名;
}
}
}
person.xml:
<response>
<persons>
<person firstname="test" />
<person firstname="john" />
</persons>
</response>
结果:
person
列表在响应对象中始终为空。为什么?您可能在私人之前缺少@xmlement
代码>这只是问题中的一个输入错误,请更正。我找不到答案(如果不坚持太多符合我的口味)。在这一点上,我开始认为当我想使用Jackson时,我应该使用Jackson注释,当我想使用JAXB注释时,我应该使用JAXB。这就是他们的观点。当然,对他们来说,友好相处似乎不是不可能的,但为什么不简单一点呢?原因是:我使用autogeneration从XSD
创建PersonResponse
,使用maven
插件cxf xjc插件
。据我所知,没有任何现有的自动生成插件可以添加Jackson
注释(如果我错了,请纠正我)。只有JAXB
注释可以自动生成。但是由于几个原因,我想使用jacksonObjectMapper
,因此我必须坚持使用jaxb
注释,并通过使用JAXBANotationModule
来教他jaxb注释。