使用Jackson序列化POJO为XML失败,请求技术排查帮助
问题排查与解决
你遇到的NoSuchMethodError本质是Jackson各组件版本不兼容导致的,以下是具体排查和修复步骤:
1. 统一Jackson核心组件版本
jackson-dataformat-xml依赖jackson-core、jackson-databind等核心库,若项目中存在其他依赖引入了不同版本的这些核心组件,就会出现方法找不到的异常。建议在Maven中统一配置Jackson版本,确保所有相关依赖版本一致:
<properties> <jackson.version>2.16.1</jackson.version> </properties> <dependencies> <dependency> <groupId>com.fasterxml.jackson.dataformat</groupId> <artifactId>jackson-dataformat-xml</artifactId> <version>${jackson.version}</version> </dependency> <!-- 显式引入核心依赖,强制版本统一 --> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-core</artifactId> <version>${jackson.version}</version> </dependency> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-databind</artifactId> <version>${jackson.version}</version> </dependency> </dependencies>
2. 排查并排除依赖冲突
执行Maven命令查看项目依赖树,找出引入冲突版本Jackson的依赖:
mvn dependency:tree
若发现某依赖引入了其他版本的Jackson核心库,通过<exclusions>标签排除冲突依赖:
<dependency> <!-- 替换为实际冲突的依赖 --> <groupId>第三方依赖groupId</groupId> <artifactId>第三方依赖artifactId</artifactId> <version>依赖版本</version> <exclusions> <exclusion> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-core</artifactId> </exclusion> <exclusion> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-databind</artifactId> </exclusion> </exclusions> </dependency>
3. 修复Person类的构造函数问题
Jackson序列化/反序列化默认需要无参构造函数,你的Person类仅提供了带参构造函数,版本冲突解决后可能出现新的序列化异常,建议添加无参构造函数:
@JacksonXmlRootElement(localName = "person") public class Person { @JacksonXmlProperty(localName = "name") public String name; @JacksonXmlProperty(localName = "age") public int age; // 添加无参构造函数 public Person() {} Person(final String n, int a){ name = n; age = a; } }
内容的提问来源于stack exchange,提问作者SPB
相关产品推荐
相关产品推荐

