Spring 集成 enrich/transform 消息使用 Rest 调用
Spring Integration enrich/transform message using Rest call
在 Spring 集成中,我收到如下消息:
{
"name":"House",
"attributeIds": [1,3,5]
}
我需要 enrich/transform 使用一些 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
InboundAdapter -> Enricher -> 请求通道 -> 服务激活器 -> Enricher -> 出站适配器?
这确实是 Content Enricher 的典型任务。
因此,您需要将传入的 JSON 反序列化为普通的 Map
。使用 request-payload-expression="payload.attributeIds"
将 ids
列表作为 sub-flow 请求的负载。
request-channel
上的订阅者可能只是简单的 Spring 集成 HTTP Outbound Gateway 来调用该 REST 服务并返回 attributes
消息。
该网关可以在没有 output-channel
的情况下通过 replyChannel
header.
将其结果返回到 content-enricher
当此回复消息到达 content-enricher
时,可以使用一个简单的 <int:property name="attributes">
来填充请求中的新选项 Map
。
之后,您可以从该映射中删除一个 attributeIds
键,并在需要时将其序列化回 JSON
。
更新
这是一个示例,说明如何使用 Java DSL 和 Spring 启动:https://github.com/artembilan/sandbox/tree/master/spring-integration-enricher
在 Spring 集成中,我收到如下消息:
{
"name":"House",
"attributeIds": [1,3,5]
}
我需要 enrich/transform 使用一些 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
InboundAdapter -> Enricher -> 请求通道 -> 服务激活器 -> Enricher -> 出站适配器?
这确实是 Content Enricher 的典型任务。
因此,您需要将传入的 JSON 反序列化为普通的 Map
。使用 request-payload-expression="payload.attributeIds"
将 ids
列表作为 sub-flow 请求的负载。
request-channel
上的订阅者可能只是简单的 Spring 集成 HTTP Outbound Gateway 来调用该 REST 服务并返回 attributes
消息。
该网关可以在没有 output-channel
的情况下通过 replyChannel
header.
content-enricher
当此回复消息到达 content-enricher
时,可以使用一个简单的 <int:property name="attributes">
来填充请求中的新选项 Map
。
之后,您可以从该映射中删除一个 attributeIds
键,并在需要时将其序列化回 JSON
。
更新
这是一个示例,说明如何使用 Java DSL 和 Spring 启动:https://github.com/artembilan/sandbox/tree/master/spring-integration-enricher