You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Jackson使用JsonTypeInfo.DEDUCTION反序列化出现EnumConstantNotPresentException异常

根因分析

这个异常的核心原因是Wildfly容器的类加载优先级冲突。JsonTypeInfo.Id.DEDUCTION是Jackson 2.12版本才新增的枚举值,你本地环境没有问题是因为运行时加载的是你指定的2.12.2版本Jackson包,但Wildfly 21默认自带的Jackson版本为2.11.x,默认类加载规则是父类加载器优先,会优先加载容器自带的低版本jackson-annotations包,导致找不到对应枚举值。你在控制台查到的应用依赖版本只是你WAR包内打包的版本,不是实际运行时加载的版本。

这个报错和你业务代码里有没有用到枚举无关,是Jackson内部处理多态相关注解逻辑时触发的。

解决方案

  • 第一步:在WAR包的WEB-INF目录下新增jboss-deployment-structure.xml配置文件,强制排除容器自带的Jackson相关模块,让应用优先加载自身打包的Jackson依赖,配置示例如下:
<?xml version="1.0" encoding="UTF-8"?>
<jboss-deployment-structure>
    <deployment>
        <exclusions>
            <module name="com.fasterxml.jackson.core.jackson-annotations" />
            <module name="com.fasterxml.jackson.core.jackson-core" />
            <module name="com.fasterxml.jackson.core.jackson-databind" />
            <module name="com.fasterxml.jackson.datatype.jackson-datatype-jdk8" />
            <module name="com.fasterxml.jackson.datatype.jackson-datatype-jsr310" />
        </exclusions>
    </deployment>
</jboss-deployment-structure>
  • 第二步:核对你项目的依赖配置,确保所有Jackson相关依赖的版本统一为2.12.2,避免出现同项目内Jackson多版本共存的问题
  • 第三步:如果修改配置后问题仍存在,可以在调用反序列化逻辑前加入调试代码,确认运行时实际加载的JsonTypeInfo.Id类来自哪个Jar包:
System.out.println(JsonTypeInfo.Id.class.getProtectionDomain().getCodeSource().getLocation());

内容的提问来源于stack exchange,提问作者Pettan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 00:18:02