【发布时间】:2021-04-13 14:41:39
【问题描述】:
我创建了一个 JMSListener 来监听 AWS SQS 队列。我成功接收到消息,但我无法将接收到的消息反序列化为没有默认值的类。
这是我的队列监听函数:
@Queue(value = "queuename", concurrency = "1-10", acknowledgeMode = JMSContext.CLIENT_ACKNOWLEDGE)
fun receive(@MessageBody sqsMessage: SQSMessageDto) {
....
}
...和类:
class SQSMessageDto(
val notificationType: String,
val mail: Mail,
val receipt: Receipt
)
除非我为字段提供默认值,否则函数无法将反序列化文本解析为 SQSMessageDto。
我尝试了什么?
当我在 io.micronaut.jms.serdes.DefaultSerializerDeserializer 的调试器模式下添加断点并手动注册 Jackson 的 KotlinModule 时,它可以工作。 (OBJECT_MAPPER.registerModule(new KotlinModule())) 但我不知道如何正确制作。
错误信息:
com.fasterxml.jackson.databind.exc.InvalidDefinitionException: 不能 构造
com.example.sqs.SQSMessageDto的实例(没有创作者, 像默认构造函数,存在):不能从对象值反序列化 (没有基于委托或基于属性的创建者)在 [来源: (字符串)“{.......}”]
【问题讨论】: