在 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