Spring Integration обогащает / преобразовывает сообщение, используя вызов Rest - PullRequest
0 голосов
/ 02 октября 2019

В Spring Integration у меня есть сообщение, подобное следующему:

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

Мне нужно обогатить / преобразовать это сообщение, используя некоторую службу отдыха, которая выдаст мне значения атрибутов.

Дляпример 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 Ответ

1 голос
/ 02 октября 2019

Это действительно типичная задача для 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

...