字符串 Cloud Stream httpclient processor expected-response-type as JSON

String Cloud Stream httpclient processor expected-response-type as JSON

我正在使用 httpclient 处理器作为我的步骤之一,如下所示(在 Shell 语法中指定,因为我在本地测试,此处添加了换行符以提高可读性):

dataflow:>stream create --name test <sourceConfig> | 
  httpclient --httpclient.urlExpression='''https://host/restUrl''' 
    --httpclient.body-expression=null 
    --headers-expression=\"{Accept: 'application/json', <otherHeaders>}\" 
  | log" --deploy

服务 returns 具有单个条目的映射,以列表作为值。

{ "key" : [ { "name" : "theName", ... }, ... ] }

默认情况下,REST 调用响应主体被解释为字符串。我想指定一个 --httpclient.expected-response-type 选项来将正文解析为 JSON。根据 docs,我需要为此指定一个 java.lang.Class<?>,而且我不确定要指定什么 class,即使在深入研究文档、单元测试和 POM 之后也是如此。有人知道吗?

或者,我是否需要在 --reply-expression 中手动执行转换?无论哪种方式,我想我仍然需要知道云流正在使用哪个 JSON 库 Spring,除非我遗漏了什么。

看来您在这方面缺少知识。 JSON 是以某种特定格式表示数据的字符串。

将字符串转换为目标 class 已经取决于您的服务了。相同的 JSON 不同的服务可能会解析为不同的域对象。我可以将它转换成 class Foo,你 - 转换成 Bar。这就是 expected-response-type 是如何提供无协议的,并让您决定将 JSON 转换成什么。

Jackson 处理器用于转换 to/from JSON。但同样:目标 POJO 是您自己的 class.

虽然您可以将 JSON 字符串转换为 java.util.Map,但它并不比 JSON 的字符串表示更好。

此外还有一个 processor,它通过网络将其结果发送到微服务链中的下一步。当您将 JSON 转换为 POJO 时,它将在活页夹的生产者端转换为 JSON 。在这里白白转换有意义吗?

SpEL 也有 JsonPropertyAccessor,它允许您访问目标 JSON 中的字段,而无需将其转换为 POJO。

因此,请考虑不要担心 JSON 转换,只需从 REST 服务接收它并按原样发送出去 - 以字符串形式表示!