【发布时间】:2019-11-05 10:09:42
【问题描述】:
我们刚刚将 Spring 升级到:
Spring boot: 2.1.0.RELEASE
Spring cloud: Greenwich.SR1
Spring integration kafka: 3.1.0.RELEASE
Spring kafka: 2.2.7.RELEASE
我们正在使用
Kafka 2.1.1
我们有一个主题,可以将不止一种类型的类实例发送到,它们都从同一个抽象类扩展而来。让我们命名为 AbstractMessage 的抽象类,还有 MessageImpl1 和 MessageImpl2 的子类。
我们曾经在消费者中将它作为对象接收(以便在以某种方式接收到错误的类时写入日志),然后使用if(message instanceof MessageImpl){}将其转换为相关的 MessageImpl
升级后,所有消息都绑定到 String 而不是它们的类。
我读到here content-type=application/json 绑定到 pojo,但即使我在输入和输出中都添加了它,它还是绑定到了一个字符串:
spring.cloud.stream.bindings.input.contentType=application/json
spring.cloud.stream.bindings.output.contentType=application/json
尝试直接接收MessageImpl得到这个错误:
原因:com.fasterxml.jackson.databind.exc.InvalidDefinitionException: 不能 构造
MessageImpl1的实例(没有创建者,默认 构造,存在):不能从对象值反序列化(没有委托- 或基于财产的创作者) 在[来源:(字节[])
知道怎么解决吗?
【问题讨论】:
标签: spring-cloud spring-kafka spring-cloud-stream