我目前正在使用 Quarkus,在想要将通过 WebSocket 接收到的 JSON 字符串消息反序列化到 CloudEvent 时遇到了问题。
使用 Quarkus ObjectMapper 不起作用,因为 Quarkus CloudEvent 堆栈使用私有类和构建器来实例化 CloudEvents。我无法使用以下内容:
public CloudEvent<?> createCloudEvent(String message) throws JsonProcessingException {
return objectMapper.readValue(message, SimpleCloudEvent.class);
}
我尝试用这个来回避这个问题:
public CloudEvent<?> createCloudEvent(String message) throws JsonProcessingException {
return objectMapper.readValue(message, CloudEventBuilder.create().build(null).getClass());
}
但是这次映射器无法将不属于 CloudEvent 规范的标头反序列化到 extensions 字段中,因为 SimpleCloudEvent 构造函数没有为每个可能的标头提供任何显式字段。
尽管如此,在另一个项目中使用 Funqy Knative,我仍然假设 Quarkus ObjectMapper 可以将 String 或 JSON 对象反序列化为 CloudEvents。下面的代码片段可以解释为什么我这么认为:
@Funq
public void receiveCloudEvent(CloudEvent<String> cloudEvent) {
//do something with the received CE
}
这里,发送到我的应用程序的是一个 HTTP 请求,最终是一个 JSON 对象。因此,Quarkus 框架或 Funqy Knative 都能够将其转换为有效的 SimpleCloudEvent,甚至包含不属于 extensions 映射中 CloudEvent 规范一部分的标头。
有谁知道框架正在做什么类/功能以及它是否可用?
或者我真的应该制作一个自定义解串器吗?
非常感谢!
这与 Quarkus 无关。
你需要看看杰克逊。如果你谷歌:杰克逊和建造者模式,你会找到关于这个问题的足够信息。