Jackson XML解析不同标签数组异常问题求助
解决Jackson解析XML时非连续同名元素列表只保留最后一个的问题
问题原因
你的XML中<A>元素被<B>元素分隔,并非连续出现。Jackson默认处理无包裹的同名列表元素时,仅会收集连续的元素;遇到非连续的同名元素时,会用后续元素覆盖之前的,最终只保留最后一个<A>。而<B>元素是连续的,所以能正常解析出所有元素。
解决方案
在Type类的List<A>字段的@JacksonXmlProperty注解中添加indexed = false参数,明确告知Jackson要收集所有同名的<A>元素,无论位置是否连续。
修改后的Type类代码:
@Data @AllArgsConstructor @NoArgsConstructor public class Type { @JacksonXmlElementWrapper(useWrapping = false) @JacksonXmlProperty(localName = "A", indexed = false) private List<A> a; @JacksonXmlElementWrapper(useWrapping = false) @JacksonXmlProperty(localName = "B") private List<B> b; }
验证效果
修改后重新解析XML,就能正确获取所有<A>元素,解析结果会变为:
Test(type=Type(a=[A(name=A1), A(name=A2), A(name=A3)], b=[B(value=B1), B(value=B2)]))
内容的提问来源于stack exchange,提问作者Sung.P
相关产品推荐
相关产品推荐

