Jackson ObjectMapper注册模块报错求助:方法参数不匹配
解决Jackson ObjectMapper注册模块时的参数不匹配报错
兄弟,你碰到的这个报错本质很明确——编译器没法把你传的这些模块识别成Jackson标准的Module子类,大概率是依赖缺失或者版本不兼容导致的,我给你一步步解决:
1. 先把所有必要的依赖补全
这些模块都不是jackson-databind自带的,得单独加依赖,而且所有Jackson相关依赖的版本必须完全一致,不然很容易出问题:
Jdk8Module和JavaTimeModule:来自jackson-module-jdk8依赖GuavaModule:来自jackson-datatype-guava依赖JsonOrgModule:来自jackson-datatype-json-org依赖AfterburnerModule:来自jackson-module-afterburner依赖
如果用Maven,你可以这么加(记得把版本换成你项目里用的Jackson版本):
<dependencies> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-databind</artifactId> <version>2.15.2</version> </dependency> <dependency> <groupId>com.fasterxml.jackson.module</groupId> <artifactId>jackson-module-jdk8</artifactId> <version>2.15.2</version> </dependency> <dependency> <groupId>com.fasterxml.jackson.datatype</groupId> <artifactId>jackson-datatype-guava</artifactId> <version>2.15.2</version> </dependency> <dependency> <groupId>com.fasterxml.jackson.datatype</groupId> <artifactId>jackson-datatype-json-org</artifactId> <version>2.15.2</version> </dependency> <dependency> <groupId>com.fasterxml.jackson.module</groupId> <artifactId>jackson-module-afterburner</artifactId> <version>2.15.2</version> </dependency> </dependencies>
更省心的是用Jackson的BOM来统一管理版本,避免手动改版本出错:
<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>
加了BOM之后,上面的依赖就不用写版本号了,会自动继承BOM的版本。
2. 确保模块类的导入路径正确
别小看导入,导错包也会导致类型不匹配,正确的导入语句应该是这样的:
import com.fasterxml.jackson.module.afterburner.AfterburnerModule; import com.fasterxml.jackson.module.jdk8.Jdk8Module; import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule; import com.fasterxml.jackson.datatype.guava.GuavaModule; import com.fasterxml.jackson.datatype.jsonorg.JsonOrgModule;
3. 可选:用更简洁的方式注册模块
其实Jackson提供了自动扫描注册的方法,不用一个个手动加,代码更简洁还不容易漏:
ObjectMapper objectMapper = new ObjectMapper() .findAndRegisterModules(); // 自动扫描类路径下所有Jackson模块
这个方法会自动识别并注册Jdk8、JavaTime、Guava、JsonOrg这些模块,如果你发现Afterburner没被自动注册,再单独加一句.registerModule(new AfterburnerModule())就行。
最后检查一下
清理一下项目的依赖缓存(比如Maven的mvn clean install),重新编译,应该就能解决这个参数不匹配的报错了。
内容的提问来源于stack exchange,提问作者MChaker
相关产品推荐
相关产品推荐

