我在我的Kafka Consumer端有两个主题:主题A和主题B。两者都将传递给同一个方法。该方法的详细信息如下:
我总是发送那个msg变量类型为>到那个方法。尝试从KafkaMessageDTO中提取对象(kafkaMessageDTO.getObject()),但不幸的是,我无法做到。
在调试中,我能够看到值,并且看起来数据完全匹配,如下所示
我该如何将msg对象转换为KafkaMessageDTO对象?当我尝试转换时,我收到了这个错误。
我尝试过进行映射,但是数据中似乎没有列表,所以我无法进行迭代。问题仍然存在。
@Slf4j
@Service
public class KafkaConsumerService {
@KafkaListener(topics = { "topic-a", "topic-b" }, groupId = "X-consumer")
public <T> void listenX(Response<T> msg) {
log.info("MSG arrived to consumer");
KafkaMessageDTO<TokenMobieDTO> test = msg.getData();
@Data
@AllArgsConstructor
@NoArgsConstructor
@Builder
public class KafkaMessageDTO<T> {
@JsonProperty("object")
private T object;
@JsonProperty("header")
private HttpHeaders headers;
}
我总是发送那个msg变量类型为>到那个方法。尝试从KafkaMessageDTO中提取对象(kafkaMessageDTO.getObject()),但不幸的是,我无法做到。
在调试中,我能够看到值,并且看起来数据完全匹配,如下所示
![enter image description here](https://istack.dev59.com/NeFcl.webp)
threw exception; nested exception is java.lang.ClassCastException: class java.util.LinkedHashMap cannot be cast to class com.token.dto.TokenMobieDTO (java.util.LinkedHashMap is in module java.base of loader 'bootstrap';
我尝试过进行映射,但是数据中似乎没有列表,所以我无法进行迭代。问题仍然存在。
@JsonProperty("object")
字段是什么类型 - 你需要告诉它。 - undefinedKafkaMessageDTO<TokenMobieDTO> test = msg.getData();
在这个例子中,T 应该是KafkaMessageDTO<TokenMobieDTO>
。 - undefinedT
与对象从JSON反序列化的方式无关。反序列化发生在对象构建和初始化之前,而不是在访问字段时。如果不告诉Jackson类型,它将始终将JSON对象(即{...}
)回退到LinkedHashMap
。 - undefinedMap
转换为自定义对象(这可能是一个简单可行的解决方法)。 - undefinedKafkaConsumerService
,那可能会有所帮助。如果你有其他意见,请告诉我。 - undefined