当前位置: 首页 > 知识库问答 >
问题:

将Jackson Kotlin模块添加到Micronaut JMS

咸亦
2023-03-14

我创建了一个监听AWS SQS队列的JMSListener。我成功接收消息,但我无法将接收到的消息反序列化为没有默认值的类。

这是我的队列侦听器函数:

@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. ynsterModule(new KotlinModule()))但我不知道如何正确制作它。

错误消息:

com.fasterxml.jackson.databind.exc.InvalidDefinitionException:无法构造com.example.sqs的实例。SQSMessageDto(不存在像默认构造函数那样的创建者):无法从[源:(字符串)“{……}”处的对象值(没有基于委托或属性的创建者)反序列化

共有1个答案

终睿
2023-03-14

只需使用BeanCreatedEventListener

@Singleton
static class ObjectMapperBeanEventListener implements BeanCreatedEventListener<ObjectMapper> {

    @Override
    public ObjectMapper onCreated(BeanCreatedEvent<ObjectMapper> event) {
        final ObjectMapper mapper = event.getBean();
        mapper.registerModule(new KotlinModule())
        return mapper;
    }
}
 类似资料:
  • 问题内容: 之前我使用模块在请求中添加标头。现在,我正在对该模块尝试相同的操作。 这是我正在使用的python请求模块:http : //pypi.python.org/pypi/requests 如何向和添加标头。说我必须在标题的每个请求中添加密钥。 问题答案: 从http://docs.python- requests.org/en/latest/user/quickstart/ 您只需要用标

  • 问题内容: 有人可以告诉我如何在最新版本的Python上安装sqlite3模块吗?我正在使用Macbook,并在命令行上尝试了: 但是会弹出一个错误。 问题答案: 您不需要安装模块。它包含在标准库中(自Python 2.5起)。

  • 这就是我在做“python-V”时得到的结果 Python 2.7.11::Anaconda 2.4.0(64位)我通常使用我的终端来玩IDLE。但现在我也安装了空闲shell。 我尝试导入sys;sys.path两者。它们抛出不同的路径。我的终端返回了包含蟒蛇的路径。 我试着按照这些步骤安装一个模块。 > python设置。py sdist sudo python安装程序。py安装 然后我打开闲

  • 让我们开始定义一个新的组件,我们将用来显示信用卡信息。 credit-card.component.ts 此组件依靠获取信用卡号,并通过creditCardMask管道隐藏掉除最后4位之外的数字。 credit-card-mask.pipe.ts 一切就绪后,我们现在可以在根组件中使用 。 app.component.ts app.module.ts 注意,我们已将组件CreditCardComp

  • 问题内容: 因此,当我在Qt Creator中创建一个新的Qt项目时,只要求提供一些简单的详细信息,例如项目的位置,构建目标,主窗口类名称(以及标题,源文件和表单文件)以及最终选择将其添加到版本控制中。 创建项目后,仅获得qt核心和gui模块。我的问题是如何添加其他模块(例如network或opengl)。我已经看过了,但是我找不到如何轻松添加其他Qt模块的任何内容。我知道我可以编辑.pro文件,

  • 问题内容: 我想在我的Ember-CLI应用程序中使用此Node.js模块https://www.npmjs.com/package/remarkable- regexp 。 如何使它可用于Ember应用程序? 我通过将其添加到 但是它失败了: 路径或模式“ node_modules / remarkable-regexp / index.js”与任何文件都不匹配 问题答案: 既然是npm模块,我