在我的 Spring Cloud 函数应用程序中,我创建了一个自定义消息转换器。
我正在从 JSON 转换为 HapiFhir
Bundle.class
,然后从 Bundle.class
转换回 JSON。
convertFromInternal
方法按预期工作。它成功地将 JSON 转换为 Bundle.class
但是,
convertToInternal
永远不会被调用...
我调试了代码,发现
SimpleFunctionRegistry.class
调用了一个方法convertOutPutIfNecessary
...这个类需要String[] contentType
未设置
contentType
,因此不会触发我的自定义 convertToInternal
方法。
Bundle.class
只是 .toString()
作为输出消息。这会转换为 JSON,但不是正确的 JSON 格式的消息,因此我创建了自定义消息转换器。
我无法确定在 SimpleFunctionRegistry.class 中如何或在何处设置
contentType
值
我正确使用
CustomMessageConverter
吗?
下面是我的 CustomMessageConverter 类
public MyCustomMessageConverter() {
super(new MimeType("application", "json+fhir"), new MimeType("application", "json"));
}
@Override
protected boolean supports(Class<?> clazz) {
return (Bundle.class.equals(clazz));
}
@Override
protected Object convertFromInternal(Message<?> message, Class<?> targetClass, Object conversionHint) {
Object payload = message.getPayload();
FhirContext ctx = FhirContext.forR4();
return ctx.newJsonParser().parseResource(Bundle.class, (String) payload);
}
@Override
protected Object convertToInternal(Object payload, MessageHeaders headers, Object conversionHint) {
FhirContext ctx = FhirContext.forR4();
return ctx.newJsonParser().encodeResourceToString((Bundle) payload);
}
}
contentType
通常作为消息头。例如MessageBuilder.withPayload("foo").setHeader(MessageHeaders.CONTENT_TYPE, "application/json")
。
它们也可以作为入站消息(Kafka、Rabbit 等)的标头/属性出现,然后我们在内部将其转换为消息标头,如上所述。
无论如何,如果您仍然有疑问或遇到困难,请随时在 https://github.com/spring-cloud/spring-cloud-function 中提出问题,并包含一个重现该问题的示例,以便我们可以看一下。您可以将示例推送到 GitHub 并包含链接或附加 zip 文件