Jackson XML解析:如何处理两个包装器含同名子元素的问题?
解决Jackson XML解析中多列表共用同名字段的冲突问题
问题分析
你遇到的报错是因为Jackson将两个字段的@JacksonXmlProperty(localName = "action")识别为同一个属性,导致setter方法定义冲突。而省略该注解时,Jackson会默认用Java字段名作为XML子元素名,生成的结构不符合Jira导出的XML格式要求。
解决方案
通过给每个@JacksonXmlProperty指定唯一的propertyName参数,让Jackson内部区分两个属性,同时保持XML子元素名为action:
修改后的Workflow类
@JacksonXmlRootElement(localName = "workflow") public class Workflow implements XMLDocumentHeader { @JacksonXmlElementWrapper(localName = "initial-actions") @JacksonXmlProperty(localName = "action", propertyName = "initialAction") private List<Action> initialActions = new ArrayList<>(); @JacksonXmlElementWrapper(localName = "global-actions") @JacksonXmlProperty(localName = "action", propertyName = "globalAction") private List<Action> globalActions = new ArrayList<>(); // 此处添加getter、setter方法,或使用Lombok的@Data注解自动生成 }
补充说明
propertyName仅用于Jackson内部识别属性,不会影响XML的序列化/解析结果,最终生成的XML依然会以<action>作为子元素,分别包裹在<initial-actions>和<global-actions>容器中。- Action类无需添加
@JacksonXmlRootElement注解(该注解仅适用于XML根元素),若需自定义Action的XML结构,直接在Action类的字段上使用@JacksonXmlProperty注解即可。
内容的提问来源于stack exchange,提问作者KC Wong
相关产品推荐
相关产品推荐

