Spring Cloud 函数:自定义消息转换器 - 无法调用`convertToInternal`

问题描述 投票:0回答:1

在我的 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);
  }
}
spring spring-boot spring-mvc spring-cloud-stream spring-cloud-function
1个回答
0
投票

contentType
通常作为消息头。例如
MessageBuilder.withPayload("foo").setHeader(MessageHeaders.CONTENT_TYPE, "application/json")
。 它们也可以作为入站消息(Kafka、Rabbit 等)的标头/属性出现,然后我们在内部将其转换为消息标头,如上所述。

无论如何,如果您仍然有疑问或遇到困难,请随时在 https://github.com/spring-cloud/spring-cloud-function 中提出问题,并包含一个重现该问题的示例,以便我们可以看一下。您可以将示例推送到 GitHub 并包含链接或附加 zip 文件

© www.soinside.com 2019 - 2024. All rights reserved.