【问题标题】:Cannot deserialize instance of `com.dckr.microsvc.model.Event` out of START_ARRAY token无法从 START_ARRAY 令牌中反序列化“com.dckr.microsvc.model.Event”的实例
【发布时间】:2021-03-16 08:01:37
【问题描述】:

我正在从 kafka 生产者那里获取 json 有效负载。

[
{
    "mcID": "840465",
    "subscriberId": "",
    "sequenceNumber": "",
    "membershipSourceSystem": "",
    "groupNumber": "",
    "userNm": "174988",
    "webGuid": "",
    "interactionSource": "Engage",
    "channel": "Mobile",
    "sessionId": "",
    "deviceId": "",
    "direction": "",
    "injectionTimestamp": "2020-09-25T00:00:00.000-04:00",
    "associateId": "",
    "contactType": "",
    "contactEmail": "",
    "contactFirstName": "SUS",
    "contactMiddletName": "",
    "contactLastName": "HAT",
    "contactDOB": "19540807",
    "outcome": "",
    "notes": "",
    "interactionIntent": {
      "interactionIntent": {
        "registration": {
          "eventTimestamp": "2020-09-25T00:00:00.000-04:00"
        }
      },
      "login": [
        {
          "totalVisits": "1",
          "totalCareTeamProviders": "2",
          "totalTrackersPurchased": "0",
          "eventTimestamp": "2020-09-25T00:00:00.000-04:00"
        }
      ]
    }
  }
]

我在 kafka 侦听器端遇到以下问题。

2020-12-03 23:45:30.698 [org.springframework.kafka.KafkaListenerEndpointContainer#0-8-C-1] ERROR c.a.e.d.m.e.k.consumer.EventListener -
                EEECATLIGHTDIGITALINTERACTIONS KAFKA CONSUMER:  error caught in kafka listener: Cannot deserialize instance of `com.anthem.emep.dckr.microsvc.eeecatlightdigitalinteractions.model.Event` out of START_ARRAY token
 at [Source: (String)"[{"mcID":"840465","subscriberId":"","sequenceNumber":"","membershipSourceSystem":"","groupNumber":"","userNm":"174988","webGuid":"","interactionSource":"Engage","channel":"Mobile","sessionId":"","deviceId":"","direction":"","injectionTimestamp":"2020-09-25T00:00:00.000-04:00","associateId":"","contactType":"","contactEmail":"","contactFirstName":"SUSAN","contactMiddletName":"","contactLastName":"HATCHER","contactDOB":"19540807","outcome":"","notes":"","interacti"[truncated 238 chars]; line: 1, column: 1]
2020-12-03 23:45:30.803 [org.springframework.kafka.KafkaListenerEndpointContainer#0-10-C-1] ERROR c.a.e.d.m.e.k.consumer.EventListener - error caught in kafka listener: Cannot deserialize instance of `com.anthem.emep.dckr.microsvc.eeecatlightdigitalinteractions.model.Event` out of START_ARRAY token

我们什么时候遇到这种异常?是因为对象没有正确映射吗?有人可以帮忙吗?

Kafka 消费者代码:

@KafkaListener(topics ="#{'${applicationProperties.kafkapropmap.kafka.topics}'.split('\\\\ ')}")
public HttpStatus receiveMessages(ConsumerRecord<?,?> consumerRecord, Acknowledgment acknowledgment) {
    try {
        log.info("event Received = "+ (String) consumerRecord.value());
        ObjectMapper mapper = new ObjectMapper();
        Event event = mapper.readValue(((String) consumerRecord.value()), Event.class);
       } catch(Exception ex) {
        log.error("{} error caught in kafka listener: {}", ApplicationConstant.MEMBER_MSG_HEADER, ex.getMessage());
        acknowledgment.acknowledge();
    }

}

【问题讨论】:

    标签: java spring-boot apache-kafka jackson


    【解决方案1】:

    Kafka 正在向您发送一个包含 [] 的有效负载。这意味着您必须将其映射到 List。

    试试这个:

    ObjectMapper mapper = new ObjectMapper();
            List<Event> events = mapper.readValue(((String) consumerRecord.value()), 
                    new TypeReference<List<Event>>() {
            });
    

    【讨论】:

      猜你喜欢
      • 2020-09-23
      • 1970-01-01
      • 2016-07-30
      • 2015-03-10
      • 2019-10-25
      • 2015-12-24
      • 2018-12-03
      • 2020-07-07
      • 2011-12-02
      相关资源
      最近更新 更多