2016-07-08 2 views
2

Я использую весеннюю интеграцию для определения потока, который будет делать две вещи: сначала выполнить HTTP-вызов с заданной полезной нагрузкой, а затем использовать предоставленный ответ и исходную полезную нагрузку, чтобы сделать еще один http-вызов ,Весна Интеграция JAVA DSL Использование исходной полезной нагрузки при последующем вызове

Как это можно достичь? В приведенном ниже коде я могу использовать и модифицировать первую полезную нагрузку и использовать ее в firstHttpRequest, но тогда как я могу использовать исходную полезную нагрузку с ответом от firstHttpRequest?

Любые хорошие практики?

@Bean 
public IntegrationFlow makeHttpCalls(){ 

    return message -> message    
      .transform(new GenericTransformer<Message<String>, String>() { 
        @Override 
        public String transform(Message<String> message){ 
          return message.getPayload() + " first call";  
        }  
      }) 
      .handle(makeFirstHttpRequest()) 
      .transform(new GenericTransformer<Message<String>, String>() { 
       @Override 
       public String transform(Message<String> message) { 
        logger.debug("Response from transform: " + message); 
        return message.getPayload(); 
       } 
      }) 
      .handle(makeSecondHttpRequest()) 
      .channel("entrypoint"); 
} 

ответ

3

Один подход .enrichHeaders() и место, что оригинальный payload в один пользовательский заголовок. Поэтому по течению, после ответа, обратитесь к этому заголовку, чтобы восстановить оригинал payload.

Другой подход - .enrich(), когда вы делаете внешний вызов и обогащаете оригинальное сообщение информацией из ответа.

Есть другие инструменты, такие как .routeToRecipients() и .publishSubscribeChannel(), где вы отправляете одно и то же сообщение в разные подпотоки для разных логик.

Но это все, что вам нужно.

+0

Спасибо, я думал об использовании .enrichHeaders() и заполнении заголовка на самом деле не лучший подход, так как он будет использовать этот настраиваемый заголовок в http-вызове. Где именно использовать .enrich()? Прежде чем сделать http-вызов? – karruma

+0

??? «DefaultHttpHeaderMapper» не отображает пользовательские заголовки. Необходимо понять определение 'makeFirstHttpRequest()'. –

+0

Это обработчик, который я использую, чтобы позвонить: 'Http.outboundGateway (FIRST_CALL_URI) .extractPayload (true) .httpMethod (HttpMethod.POST) .expectedResponseType (String.class) .get();' должен ли я использовать другой? – karruma

Смежные вопросы