Jackson反序列化ZonedDateTime时出现NoSuchFieldError问题求助
解决方案:NoSuchFieldError: ADJUST_DATES_TO_CONTEXT_TIME_ZONE
这个错误的核心原因是Jackson核心依赖与jackson-datatype-jsr310模块版本不匹配。ADJUST_DATES_TO_CONTEXT_TIME_ZONE字段是Jackson 2.8及以上版本才引入的,如果你的项目中jackson-databind、jackson-core等核心包版本低于2.8,但jsr310模块用了更高版本,就会触发这个字段找不到的异常。
下面是具体的修复步骤:
1. 统一Jackson所有相关依赖的版本
确保以下依赖的版本完全一致:
jackson-corejackson-databindjackson-annotationsjackson-datatype-jsr310
比如在pom.xml中明确指定相同版本:
<dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-core</artifactId> <version>2.15.2</version> <!-- 选择一个稳定的高版本,比如2.15.x系列 --> </dependency> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-databind</artifactId> <version>2.15.2</version> </dependency> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-annotations</artifactId> <version>2.15.2</version> </dependency> <dependency> <groupId>com.fasterxml.jackson.datatype</groupId> <artifactId>jackson-datatype-jsr310</artifactId> <version>2.15.2</version> </dependency>
2. 使用DependencyManagement锁定版本(推荐)
为了避免项目中其他依赖间接引入不同版本的Jackson,建议在pom.xml的dependencyManagement节点中统一锁定版本:
<dependencyManagement> <dependencies> <dependency> <groupId>com.fasterxml.jackson</groupId> <artifactId>jackson-bom</artifactId> <version>2.15.2</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement>
这样之后,你只需要引入jsr310依赖,不用指定版本,会自动继承bom中的统一版本:
<dependency> <groupId>com.fasterxml.jackson.datatype</groupId> <artifactId>jackson-datatype-jsr310</artifactId> </dependency>
3. 排查并排除冲突依赖
如果还是有问题,用Maven命令查看依赖树,找出引入低版本Jackson的依赖:
mvn dependency:tree | grep jackson
找到冲突的依赖后,在对应的dependency中添加exclusions排除低版本的Jackson核心包,比如:
<dependency> <groupId>某个引入低版本Jackson的groupId</groupId> <artifactId>对应的artifactId</artifactId> <exclusions> <exclusion> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-databind</artifactId> </exclusion> <exclusion> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-core</artifactId> </exclusion> </exclusions> </dependency>
完成以上步骤后,重新构建项目,定时任务的序列化/反序列化异常应该就能解决了。
内容的提问来源于stack exchange,提问作者MOURAD ALIBI
相关产品推荐
相关产品推荐

