使用Jackson序列化XML正常但反序列化为Java POJOs时出错求助
问题分析与解决方案
错误原因
序列化正常但反序列化失败的核心问题在于:Jackson XML反序列化时,无法通过带@JsonCreator的带参构造方法,正确将XML中被<dependencies>包裹的集合结构映射到List<Dependency>参数上。
Jackson在处理XML集合时,依赖@JacksonXmlElementWrapper和@JacksonXmlProperty的组合来识别容器节点和子元素,但带参构造方法的参数没有和XML的容器节点做正确绑定,导致Jackson误将<dependencies>当作普通对象而非集合容器,抛出类型不匹配错误。
解决方案
方案1:添加无参构造方法(推荐)
Jackson默认需要无参构造来实例化对象,结合@Getter/@Setter生成的setter方法,即可正常完成反序列化。修改后的实体类如下:
LicenseSummary.java
@Getter @Setter @JacksonXmlRootElement(localName = "licenseSummary") @EqualsAndHashCode public class LicenseSummary { @NonNull @JacksonXmlProperty(localName = "dependency") @JacksonXmlElementWrapper(localName = "dependencies") List<Dependency> dependencies; // 添加无参构造,供Jackson反序列化使用 public LicenseSummary() {} // 保留原有带参构造,不影响业务代码使用 public LicenseSummary(@NonNull List<Dependency> dependencies) { this.dependencies = dependencies; } }
Dependency.java
@Getter @Setter @EqualsAndHashCode public class Dependency { @NonNull @JacksonXmlProperty(localName = "groupId") private String groupId; // 添加无参构造 public Dependency() {} // 保留原有带参构造 public Dependency(@NonNull String groupId) { this.groupId = groupId; } }
方案2:调整@JsonCreator的参数绑定(适合必须保留带参构造的场景)
如果一定要用带@JsonCreator的构造方法,需要给构造方法的参数添加注解,明确对应XML的节点名称:
LicenseSummary.java
@Getter @Setter @JacksonXmlRootElement(localName = "licenseSummary") @EqualsAndHashCode public class LicenseSummary { @NonNull @JacksonXmlProperty(localName = "dependency") @JacksonXmlElementWrapper(localName = "dependencies") List<Dependency> dependencies; @JsonCreator public LicenseSummary( // 明确指定参数对应XML的容器节点dependencies @JacksonXmlProperty(localName = "dependencies") @NonNull List<Dependency> dependencies ) { this.dependencies = dependencies; } }
Dependency.java
@Getter @Setter @EqualsAndHashCode public class Dependency { @NonNull @JacksonXmlProperty(localName = "groupId") private String groupId; @JsonCreator public Dependency( // 明确指定参数对应XML的groupId节点 @JacksonXmlProperty(localName = "groupId") @NonNull String groupId ) { this.groupId = groupId; } }
内容的提问来源于stack exchange,提问作者Walnussbär
相关产品推荐
相关产品推荐

