在 Jersey 的 SSE 事件中发送 POJO?
Sending POJOs in SSE event with Jersey?
我希望能够使用 Jersey 通过 SSE 发送 POJO。例如,这(使用较旧的 Jersey API)有效:
final OutboundEvent.Builder eventBuilder = new OutboundEvent.Builder();
eventBuilder.name("message-to-client");
eventBuilder.data(String.class, "Hello world " + i + "!");
final OutboundEvent event = eventBuilder.build();
eventOutput.write(event);
虽然这不是:
final OutboundEvent.Builder eventBuilder = new OutboundEvent.Builder();
eventBuilder.name("message-to-client");
eventBuilder.data(Item.class, new Item());
final OutboundEvent event = eventBuilder.build();
eventOutput.write(event);
returns "new Item()" 的端点让我得到了我期望的 JSON,但如果我通过 SSE 尝试它,它就会爆炸。我想做的事情是不可能的,还是我错过了一些基本的东西?
您需要设置媒体类型,以便 Jersey 知道找到正确的提供程序来序列化它。如果您不设置它,它将默认为 text/plain。所以目前,泽西岛正在寻找一个提供程序来处理 text/plain-POJO,但它找不到。
eventBuilder.mediaType(MediaType.APPLICATION_JSON);
我希望能够使用 Jersey 通过 SSE 发送 POJO。例如,这(使用较旧的 Jersey API)有效:
final OutboundEvent.Builder eventBuilder = new OutboundEvent.Builder();
eventBuilder.name("message-to-client");
eventBuilder.data(String.class, "Hello world " + i + "!");
final OutboundEvent event = eventBuilder.build();
eventOutput.write(event);
虽然这不是:
final OutboundEvent.Builder eventBuilder = new OutboundEvent.Builder();
eventBuilder.name("message-to-client");
eventBuilder.data(Item.class, new Item());
final OutboundEvent event = eventBuilder.build();
eventOutput.write(event);
returns "new Item()" 的端点让我得到了我期望的 JSON,但如果我通过 SSE 尝试它,它就会爆炸。我想做的事情是不可能的,还是我错过了一些基本的东西?
您需要设置媒体类型,以便 Jersey 知道找到正确的提供程序来序列化它。如果您不设置它,它将默认为 text/plain。所以目前,泽西岛正在寻找一个提供程序来处理 text/plain-POJO,但它找不到。
eventBuilder.mediaType(MediaType.APPLICATION_JSON);