Spring 集成使用 Rest 调用丰富/转换消息



在 Spring 集成中,我有如下消息:

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

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

例如,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

入站适配器 -> 扩充器 -> 请求通道 -> 服务激活器 -> 扩充器 -> 出站适配器?

这确实是内容丰富器的典型任务。

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

request-channel上的订阅者可能只是简单的 Spring Integration HTTP 出站网关,用于调用该 REST 服务并获取attributes消息。 此网关可以在没有output-channel的情况下通过replyChannel标头将其结果生成回content-enricher

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

之后,您可以从该映射中删除attributeIds密钥,并在需要时将其序列化回JSON

更新

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

相关内容

  • 没有找到相关文章

最新更新