String Cloud Stream httpclient处理器expect-response-type为JSON

时间:2017-08-10 18:12:42

标签: spring-cloud-stream spring-cloud-dataflow

我使用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

该服务返回一个带有单个条目的Map,其中列表为值。

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

默认情况下,REST调用响应正文被解释为String。我想指定一个--httpclient.expected-response-type选项将主体解析为JSON。根据{{​​3}},我需要为此指定java.lang.Class<?>,并且我不确定要指定哪个类,即使在对文档,单元测试和POM进行大量挖掘之后也是如此。有谁知道吗?

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

1 个答案:

答案 0 :(得分:1)

看起来好像你在这里缺少一些知识。 JSON是对某些特定格式的数据的字符串重复。

这已经取决于您将该字符串转换为目标类的服务。相同的JSON不同服务可能会解析到不同的域对象。我可以将其转换为Foo课程,转换为Bar。这就是为expected-response-type提供无协议的方式,让您决定转换该JSON的内容。

Jackson处理器用于转换为JSON或从JSON转换。但同样:目标POJO是你自己的类。

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

更多信息是processor,它通过网络将结果发送到微服务链的下一步。当您将该JSON转换为POJO时,它将在绑定器的生产者端转换为JSON。将它转换为空白是否有意义?

SpEL还有JsonPropertyAccessor,可让您访问目标JSON中的字段,而无需将其转换为POJO。

因此,请考虑不要担心JSON转换,只是从REST服务接收它并按原样发送 - 在字符串重复中!