Payload for sqs message when using arraylist and objects

38 views Asked by At

while trying to send message to sqs , during parsing receiving error :

{"message":"Exception com.fasterxml.jackson.core.JsonParseException: Unexpected character ('i' (code 105)): was expecting comma to separate Array entries\n at [Source: (String)\

Class structure:

data class TriggerPayoutPayload(
    val customerId: String,
    val bookingType: BookingEntityType,
    val itemsId: List<ListItems>?,
)

enum class BookingEntityType {
    PREBOOKED,
    RETURN,
}

enum class ItemType {
    HEALTH,
    BEVERAGE,
}

data class ListItems(
    val itemType: ItemType,
    val description: List<String>,
)

Used below payload :

{
"type": "test.payout",
"id":"sqsMsgId-01-03-01",
"body": {
"customer_id": "cus123",
"booking_type": "PREBOOKED",
"items_id":["{"item_type":"HEALTH","description":"Healthy"}"]
}
}

Code fails to parse event.payload with TriggerPayoutPayload. Only log statement printed but cannot proceed to payoutProcessor.process()

Sqs event processing:

private fun eventsProcessor(sqsEvent: SqsEvent<*>) {
log.info("Handling event ${sqsEvent.id} type: ${sqsEvent.type}")
        when (sqsEvent.type) {
            PREBOOKED ->
                payoutProcessor.process(
                    sqsEvent.payload as TriggerPayoutPayload,
                )
}


data class SqsEvent<T>(
    val id: String,
    val time: Instant? = null,
    val type: String,
@JsonSubTypes(
        Type(value = TriggerPayoutPayload::class, name = "PREBOOKED"))

val payload: T? = null,
    val metadata: EventMetadata? = null,
    var messageId: String? = null,
    var receiptHandler: String? = null)

StackTrace

{"message":"Exception java.lang.NullPointerException: null cannot be cast to non-null type com.testproject.checkout.britania.migration.domain.TriggerPayoutPayload, stacktrace: java.lang.NullPointerException: null cannot be cast to non-null type com.testproject.checkout.britania.migration.domain.TriggerPayoutPayload\n\tat com.testproject.checkout.britania.migration.ApplicationHandler.eventsProcessor(ApplicationHandler.kt:114)\n\tat com.testproject.checkout.britania.migration.ApplicationHandler.handleRequest(ApplicationHandler.kt:72)\n\tat com.testproject.checkout.britania.migration.ApplicationHandler.handleRequest(ApplicationHandler.kt:35)\n\tat com.amazonaws.services.lambda.runtime.api.client.EventHandlerLoader$PojoHandlerAsStreamHandler.handleRequest(EventHandlerLoader.java:202)\n\tat com.amazonaws.services.lambda.runtime.api.client.EventHandlerLoader$2.call(EventHandlerLoader.java:905)\n\tat com.amazonaws.services.lambda.runtime.api.client.AWSLambda.startRuntime(AWSLambda.java:245)\n\tat com.amazonaws.services.lambda.runtime.api.client.AWSLambda.startRuntime(AWSLambda.java:197)\n\tat 
0

There are 0 answers