开发者社区 > 大数据与机器学习 > 实时计算 Flink > 正文

UnrecognizedPropertyException: Unrecognized field

image.png

org.apache.flink.shaded.jackson2.com.fasterxml.jackson.databind.exc.UnrecognizedPropertyException: Unrecognized field "status" (class org.apache.flink.runtime.rest.messages.ErrorResponseBody), not marked as ignorable (one known property: "errors"])
 at [Source: UNKNOWN; byte offset: #UNKNOWN] (through reference chain: org.apache.flink.runtime.rest.messages.ErrorResponseBody["status"])

flink1.8.1 cdc3.2.0 报这个错,有遇到的吗

StreamExecutionEnvironment env = StreamExecutionEnvironment.createRemoteEnvironment("localhost",8991);

展开
收起
尊敬的用户 2024-10-10 19:16:49 43 0
1 条回答
写回答
取消 提交回答
  • 这个错误 org.apache.flink.shaded.jackson2.com.fasterxml.jackson.databind.exc.UnrecognizedPropertyException 表示在使用 Jackson 库进行 JSON 序列化或反序列化时,遇到了一个无法识别的属性。在你提供的错误信息中,Jackson 在尝试将 JSON 数据反序列化为 org.apache.flink.runtime.rest.messages.ErrorResponseBody 类的对象时,发现了一个名为 "status" 的属性,但 ErrorResponseBody 类中没有这个属性,而 Jackson 只知道 ErrorResponseBody 类中有一个名为 "errors" 的属性。

    对于 flink 1.8.1cdc 3.2.0 报出这个错误,可能有以下原因及解决方法:

    原因分析

    1. 数据不匹配:你接收到的 JSON 数据的格式与 ErrorResponseBody 类所期望的格式不匹配。也就是说,数据源发送的 JSON 中包含了 "status" 这个属性,但你的代码中定义的 ErrorResponseBody 类没有对应的 status 字段来接收这个属性值。
    2. 版本兼容性问题flink 1.8.1cdc 3.2.0 之间可能存在一些版本兼容性问题,导致数据处理过程中出现这种异常。也许在某个版本的更新中,数据格式或者类的定义发生了变化,但你的代码没有相应地进行更新。
    3. 外部数据源问题:如果数据是从外部系统或数据源获取的,那么可能是外部系统发送的数据格式发生了变化,或者发送了错误格式的数据。

    解决方法

    1. 检查数据格式
      • 确认数据源发送的 JSON 数据格式是否正确。你可以通过打印接收到的 JSON 数据或者使用 JSON 验证工具来检查数据的有效性。
      • 检查你的代码中 ErrorResponseBody 类的定义,确保它与实际接收到的数据格式相匹配。如果 status 字段不是你所需要的,那么需要检查数据的来源并进行相应的调整。
    2. 更新代码
      • 如果是版本兼容性问题,查看 flinkcdc 的相关文档,了解是否有针对这个问题的更新或解决方案。根据文档的建议,更新你的代码或依赖库的版本。
      • 如果 status 字段是后来添加到数据中的,那么需要更新 ErrorResponseBody 类,添加对应的 status 字段以及相应的 getter 和 setter 方法,以便 Jackson 能够正确地反序列化数据。
    3. 处理异常
      • 在代码中添加适当的异常处理机制,捕获 UnrecognizedPropertyException 异常,并根据具体情况进行处理。例如,你可以记录错误信息,或者返回一个默认值或错误响应给调用方。
      • 如果 status 字段是不必要的,可以在 ErrorResponseBody 类上使用 @JsonIgnoreProperties(ignoreUnknown = true) 注解,告诉 Jackson 在反序列化时忽略未知的属性,这样就不会抛出 UnrecognizedPropertyException 异常。但是这种方法需要谨慎使用,确保忽略未知属性不会影响到程序的正常逻辑。

    以下是一个简单的示例代码,展示了如何在 ErrorResponseBody 类上使用 @JsonIgnoreProperties(ignoreUnknown = true) 注解:

    import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
    
    @JsonIgnoreProperties(ignoreUnknown = true)
    public class ErrorResponseBody {
        private String[] errors;
    
        public String[] getErrors() {
            return errors;
        }
    
        public void setErrors(String[] errors) {
            this.errors = errors;
        }
    }
    

    通过以上方法,应该可以解决 UnrecognizedPropertyException 异常。如果问题仍然存在,可能需要进一步分析数据的来源和代码的逻辑,以确定问题的根本原因。

    2024-10-14 16:05:23
    赞同 128 展开评论 打赏

实时计算Flink版是阿里云提供的全托管Serverless Flink云服务,基于 Apache Flink 构建的企业级、高性能实时大数据处理系统。提供全托管版 Flink 集群和引擎,提高作业开发运维效率。

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载