在使用通用类型的事件负载时获取 java.lang.ClassCastException

问题描述 投票:0回答:1

我有 Spring Boot

3.1.1
kotlin 应用程序,它使用 Spring Cloud
2022.0.4
来消费 Kafka 事件。

消费功能:

@Bean
    fun ipConsumer(): Consumer<Message<PayloadWithEmbeddedHeaders<InstructionalPlanCreatedEvent>>> {
        return Consumer {
            
            if (it.headers[PublisherKafka.EVENT_TYPE_HEADER_NAME] == InstructionalPlanCreatedEvent::class.java.simpleName) {
                process(ip = it.payload.body)
            }
        }
    }

通用类型类:

data class PayloadWithEmbeddedHeaders<T>(val headers: Map<String, Any> = emptyMap(), val body: T)

活动类别:

data class InstructionalPlanCreatedEvent(
    val id: UUID,
    val organisationId: UUID,
    val organisationName: String? = null,
    val curriculumId: Long,
    val curriculumName: String? = null,
    val subjectId: Long,
    val subjectName: String? = null,
    val gradeId: Long,
    val gradeName: String? = null,
    val academicYearId: Long,
    val academicYear: String? = null
)

在我的消费者函数中,当访问

it.payload.body
时,它会抛出
ClassCastException
,因为它以
LinkedHashMap
的形式出现。

此外,它并不是在活页夹测试中失败,而是在实际的 kafka 事件传入时失败。

spring spring-boot kotlin spring-cloud-stream spring-cloud-stream-binder-kafka
1个回答
0
投票

这个问题已通过 this commit 解决。

您可以明确地将其添加为依赖项吗?

<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-function-context</artifactId>
    <version>4.0.6-SNAPSHOT</version>
</dependency>
© www.soinside.com 2019 - 2024. All rights reserved.