vertx IllegalArgumentException:类型没有消息编解码器-如何为自定义类型创建使用者

Ork*_*zen 4 exception event-bus vert.x

我有一个创建事件总线使用者的顶点,如下所示:

    public void start() {
        vertx.eventBus().consumer(ADDRESS_REQUEST, this::handleRequestMessage);

    }

    private void handleRequestMessage(Message<VWApiConversation> msg) {

       VWApiConversation conversation = msg.body();

    }
Run Code Online (Sandbox Code Playgroud)

但是在向该地址发送消息时:

 vertx.eventBus().send(VehicleStateCoordinatorVerticle.ADDRESS_REQUEST, conversation, deliveryOptions, res -> {
Run Code Online (Sandbox Code Playgroud)

...

我得到错误:

java.lang.IllegalArgumentException: No message codec for type: class com.vulog.vwgateway.model.VWApiConversation
Run Code Online (Sandbox Code Playgroud)

我想念什么吗?

hom*_*man 5

默认情况下,Vert.x支持序列化JVM原语Buffers和JsonObjects。对于其他自定义类型,您需要编写自己的MessageCodec

这是一些可能有帮助的文档:

  • 官方文档对此有一些说明。您将特别关注标题为“邮件类型”的部分。
  • 是一个示例MessageCodec实现。(此代码段中未显示的是通过进行编解码器的注册EventBus.registerCodec()。)

为了我的品味,我一直将其JsonObject用作消息传递媒体(因为我的设置使我能够使用)。为每种域类型编写自定义(反)序列化器似乎很麻烦。