使用Rest调用的Spring Integration丰富/转换消息

时间:2019-10-02 16:16:22

标签: spring-integration spring-integration-dsl spring-integration-http

在Spring Integration中,我收到如下消息:

{
  "name":"House",
  "attributeIds": [1,3,5]
}

我需要使用一些Rest Service丰富/转换此消息,这将为我提供属性值。

例如http://restservice.com/attributes?id=1,3,5会回答我

{"attributes": [
  {"id": 1, "value":"Waterproof"},
  {"id": 3, "value":"SoundProof"},
  {"id": 5, "value":"Concrete"}
]}

最终对象应如下所示:

{
  "name":"House",
  "attributes": [
    {"id": 1, "value":"Waterproof"},
    {"id": 3, "value":"SoundProof"},
    {"id": 5, "value":"Concrete"}
  ]
}

如何实现?

应该是这样吗? https://www.youtube.com/watch?time_continue=273&v=DHPsWDgEUXg

InboundAdapter-> Enricher->请求通道->服务激活器-> Enricher->出站适配器?

1 个答案:

答案 0 :(得分:1)

这确实是Content Enricher的典型任务。

因此,您需要将传入的JSON反序列化为普通的Map。使用request-payload-expression="payload.attributeIds"ids的列表作为子流请求的有效内容。

request-channel上的订阅者可以只是简单的Spring Integration HTTP Outbound Gateway,以调用该REST服务并获得一条attributes消息。 该网关可能没有output-channel,而是通过content-enricher标头将其结果返回到replyChannel

当此回复消息到达content-enricher时,可以使用简单的<int:property name="attributes">在请求Map中填充该新选项。

然后,您可以从该映射中删除一个attributeIds键,并在需要时将其序列化回JSON

更新

以下是使用Java DSL和Spring Boot如何实现的示例:https://github.com/artembilan/sandbox/tree/master/spring-integration-enricher