kafka Cannot convert from [java.lang.String] to [xxx] for GenericMessag
Kafka Consumer需要将从Kafka Broker接收到的消息反序列化为Java对象,而。属性设置为正确的反序列化器类。例如,如果要将消息反序列化为JSON格式的Java对象,则可以使用。属性用于指定反序列化器的类名。如果使用了第三方反序列化器,也需要确保该反序列化器实现了该接口。该异常表明,Kafka Consumer尝试将一个字符串类型的消息转换为。如果反序列化的Java对象不在该包
错误提示:
kafka Cannot convert from [java.lang.String] to [io.popoo.ad.event.AdClickedEvent] for GenericMessage
解决方案:
这个错误通常发生在使用Kafka Consumer接收消息时,没有正确地配置value.deserializer
属性。
Kafka Consumer需要将从Kafka Broker接收到的消息反序列化为Java对象,而value.deserializer
属性用于指定反序列化器的类名。如果未正确配置该属性,则会抛出类似于以下的异常:
org.springframework.messaging.converter.MessageConversionException: Cannot convert from [java.lang.String] to [io.popoo.ad.event.AdClickedEvent] for GenericMessage
...
Caused by: org.springframework.kafka.support.serializer.DeserializationException: Failed to deserialize payload. Is the value a serialized payload?...
该异常表明,Kafka Consumer尝试将一个字符串类型的消息转换为io.popoo.ad.event.AdClickedEvent
类型的Java对象,但是没有正确的反序列化器。
要解决这个问题,需要将value.deserializer
属性设置为正确的反序列化器类。例如,如果要将消息反序列化为JSON格式的Java对象,则可以使用org.springframework.kafka.support.serializer.JsonDeserializer
类。在Spring Boot中,可以在application.properties
或application.yml
文件中添加以下配置:
spring.kafka.consumer.value-deserializer=org.springframework.kafka.support.serializer.JsonDeserializer
spring.kafka.consumer.properties.spring.json.trusted.packages=*
这将使Kafka Consumer使用JsonDeserializer
将消息反序列化为JSON格式的Java对象,并将io.popoo.ad.event
包设置为可信任的包。如果反序列化的Java对象不在该包下,则会抛出ClassCastException
异常。
需要注意的是,value.deserializer
属性的值必须是实现了org.apache.kafka.common.serialization.Deserializer
接口的类名。如果使用了第三方反序列化器,也需要确保该反序列化器实现了该接口。
更多推荐
所有评论(0)