Kafka Json消费者错误java.lang.NoSuchFieldError:READ_UNKNOWN_ENUM_VALUES_USING_DEFAULT_VALUE

mht*_*mht 10 apache-kafka spring-kafka jackson-databind

我正在使用 Spring Boot 和 Json Deserializer 来运行 kafka Consumer。运行应用程序时我收到错误

Caused by: java.lang.NoSuchFieldError: READ_UNKNOWN_ENUM_VALUES_USING_DEFAULT_VALUE
                at com.fasterxml.jackson.databind.deser.std.EnumDeserializer.createContextual(EnumDeserializer.java:211)
                at com.fasterxml.jackson.databind.DeserializationContext.handlePrimaryContextualization(DeserializationContext.java:836)
                at com.fasterxml.jackson.databind.deser.BeanDeserializerBase.resolve(BeanDeserializerBase.java:550)
                at com.fasterxml.jackson.databind.deser.DeserializerCache._createAndCache2(DeserializerCache.java:294)
                at com.fasterxml.jackson.databind.deser.DeserializerCache._createAndCacheValueDeserializer(DeserializerCache.java:244)
                at com.fasterxml.jackson.databind.deser.DeserializerCache.findValueDeserializer(DeserializerCache.java:142)
                at com.fasterxml.jackson.databind.DeserializationContext.findNonContextualValueDeserializer(DeserializationContext.java:644)
                at com.fasterxml.jackson.databind.deser.BeanDeserializerBase.resolve(BeanDeserializerBase.java:539)
                at com.fasterxml.jackson.databind.deser.DeserializerCache._createAndCache2(DeserializerCache.java:294)
                at com.fasterxml.jackson.databind.deser.DeserializerCache._createAndCacheValueDeserializer(DeserializerCache.java:244)
                at com.fasterxml.jackson.databind.deser.DeserializerCache.findValueDeserializer(DeserializerCache.java:142)
                at com.fasterxml.jackson.databind.DeserializationContext.findNonContextualValueDeserializer(DeserializationContext.java:644)
                at com.fasterxml.jackson.databind.deser.BeanDeserializerBase.resolve(BeanDeserializerBase.java:539)
                at com.fasterxml.jackson.databind.deser.DeserializerCache._createAndCache2(DeserializerCache.java:294)
                at com.fasterxml.jackson.databind.deser.DeserializerCache._createAndCacheValueDeserializer(DeserializerCache.java:244)
                at com.fasterxml.jackson.databind.deser.DeserializerCache.findValueDeserializer(DeserializerCache.java:142)
                at com.fasterxml.jackson.databind.DeserializationContext.findRootValueDeserializer(DeserializationContext.java:654)
                at com.fasterxml.jackson.databind.ObjectReader._prefetchRootDeserializer(ObjectReader.java:2430)
                at com.fasterxml.jackson.databind.ObjectReader.<init>(ObjectReader.java:194)
                at com.fasterxml.jackson.databind.ObjectMapper._newReader(ObjectMapper.java:780)
                at com.fasterxml.jackson.databind.ObjectMapper.readerFor(ObjectMapper.java:4263)
                at org.springframework.kafka.support.serializer.JsonDeserializer.initialize(JsonDeserializer.java:502)
                at org.springframework.kafka.support.serializer.JsonDeserializer.setupTarget(JsonDeserializer.java:487)
                ... 56 common frames omitted
Run Code Online (Sandbox Code Playgroud)

我正在使用 spring-boot 3.0.5 和 jackson-databing 2.15.0。有人遇到过同样的错误吗?

我试图调试这个问题,它似乎与我的域对象包含枚举类型作为属性这一事实有关。Jackson 扫描对象的结构并急切地加载每种类型的反序列化器,当到达枚举类型时它会失败。有谁知道我如何跟踪和解决问题?

Azy*_*282 9

看起来它是2.15.0通过 github 上的这个线程发布的。

将其添加'com.fasterxml.jackson.core:jackson-annotations:2.15.0'到依赖项中可以修复它。感谢@Wenod 指出了这一点。


Gar*_*ell 4

java.lang.NoSuchFieldError:READ_UNKNOWN_ENUM_VALUES_USING_DEFAULT_VALUE

不知何故,您似乎在类路径上有旧版本的 jackson-annotations jar;它应该与数据绑定 jar 版本相同。

这是一个新的枚举值JsonFormat.Feature

   /**
     * Override for <code>DeserializationFeature.READ_UNKNOWN_ENUM_VALUES_USING_DEFAULT_VALUE</code>,
     * which allows unknown Enum values to be ignored and a predefined value specified through
     * {@link com.fasterxml.jackson.annotation.JsonEnumDefaultValue @JsonEnumDefaultValue} annotation.
     *
     * @since 2.15
     */
    READ_UNKNOWN_ENUM_VALUES_USING_DEFAULT_VALUE,
Run Code Online (Sandbox Code Playgroud)