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

改造Spring Boot版Kie Server遇Jackson版本冲突类路径问题求助

Spring Boot集成Kie Server解决Jackson版本冲突方案

问题根源

现有Spring Boot 2.6.6服务通过传递依赖引入com.fasterxml.jackson.core:jackson-databind:2.13.2.2,而使用的kie-server-spring-boot-starter-drools(7.53.0.Final至7.73.0.Final)依赖Jackson 2.11.2。版本差异导致JSON编组阶段触发NoSuchFieldError: _typeCache异常,该字段在Jackson 2.13.x中已被移除或重命名。

可行解决方案

方案1:统一Jackson版本为Kie Server兼容版本

  • 在pom.xml中强制指定Jackson版本为Kie Server依赖的2.11.2,覆盖Spring Boot的传递依赖:
<properties>
    <jackson.version>2.11.2</jackson.version>
</properties>
  • 验证Spring Boot 2.6.6与Jackson 2.11.2的兼容性,测试现有业务的Jackson序列化/反序列化逻辑是否正常。

方案2:自定义JSONMarshaller适配Jackson 2.13.x

  • 继承Kie Server的JSONMarshaller,重写configureMarshaller方法适配Jackson 2.13.x API:
public class CustomJackson213Marshaller extends JSONMarshaller {

    public CustomJackson213Marshaller(Set<Class<?>> classes, ClassLoader classLoader, MarshallingFormat format) {
        super(classes, classLoader, format);
    }

    @Override
    protected void configureMarshaller(Set<Class<?>> classes, ClassLoader classLoader) {
        ObjectMapper mapper = getObjectMapper();
        // 适配Jackson 2.13.x的TypeResolverBuilder实现
        TypeResolverBuilder<?> typer = new DefaultTypeResolverBuilder.DefaultTypeResolverBuilderImpl(DefaultTyping.NON_FINAL) {
            @Override
            public boolean useForType(JavaType t) {
                return classes.contains(t.getRawClass());
            }
        };
        mapper.setDefaultTyping(typer);
        // 保留Kie Server所需的基础配置
        mapper.registerModule(new Jdk8Module());
        mapper.registerModule(new JavaTimeModule());
        mapper.disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS);
    }
}
  • 自定义MarshallerBuilder绑定自定义实现:
public class CustomMarshallerBuilder extends BaseMarshallerBuilder {
    @Override
    public Marshaller build(Set<Class<?>> classes, ClassLoader classLoader, MarshallingFormat format) {
        if (format == MarshallingFormat.JSON) {
            return new CustomJackson213Marshaller(classes, classLoader, format);
        }
        return super.build(classes, classLoader, format);
    }
}
  • 服务启动时替换默认Marshaller工厂:
MarshallerFactory.registerMarshallerBuilder(MarshallingFormat.JSON, new CustomMarshallerBuilder());

方案3:升级Kie Server版本至兼容Jackson 2.13.x的版本

  • 升级kie-server-spring-boot-starter-drools到7.74.0.Final及以上版本,该版本已将Jackson依赖升级至2.13.x,可直接匹配现有Spring Boot的Jackson版本。

方案4:用Spring Boot全局ObjectMapper覆盖Kie Server配置

  • 配置Spring Boot全局ObjectMapper,强制Kie Server使用该实例:
@Configuration
public class JacksonConfig {

    @Bean
    @Primary
    public ObjectMapper objectMapper() {
        ObjectMapper mapper = new ObjectMapper();
        // 配置Kie Server所需的类型解析规则
        TypeResolverBuilder<?> typer = new DefaultTypeResolverBuilder.DefaultTypeResolverBuilderImpl(DefaultTyping.NON_FINAL) {
            @Override
            public boolean useForType(JavaType t) {
                return t.getRawClass().getName().startsWith("org.kie.server.api.model");
            }
        };
        mapper.setDefaultTyping(typer);
        mapper.registerModule(new Jdk8Module());
        mapper.registerModule(new JavaTimeModule());
        mapper.disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS);
        return mapper;
    }
}
  • 确保Kie Server的Marshaller注入Spring容器中的ObjectMapper,可通过自定义KieServerConfiguration实现。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 07:45:23