2016-10-25 3 views
1

Wir versuchen, eine REST-API mit HTTP OutboundGateway über DSL aufzurufen. Wir können den Aufruf sowohl mit GET als auch mit POST durchführen und die Antwort wie erwartet erhalten. Wir konnten jedoch keine Möglichkeit finden, HTTP-Header zu übergeben, während dieser Anruf über DSL erfolgt. Es gibt eine ganze Reihe von Artikeln über XML-Ansatz aber könnte nicht Dokumentation mit DSL herauszufindenFederintegration dsl http outboundgateway

return IntegrationFlows.from("FileContentChannel") 
       .handle(Http.outboundGateway("http://host:port/paymentinfo/") 
         .charset("UTF-8") 
         .httpMethod(HttpMethod.GET) 
         .headerMapper(headers) 
         .expectedResponseType(String.class)) 
       .channel(MessageChannels.queue("APIResponseChannel")) 
       .get(); 

Wir mit DefaultHttpHeaderMapper versucht, so gut, aber es hat nicht funktioniert. Kannst du uns bitte dabei unterstützen?

Dank Gary..it arbeitete mit diesem Update1

return IntegrationFlows.from("FileContentChannel") 
        .handle(Http.outboundGateway("http://host:port/paymentinfo/") 
          .charset("UTF-8") 
          .httpMethod(HttpMethod.GET) 
          .mappedRequestHeaders("pay*") 
          .headerMapper(headerMapper()) 
          .expectedResponseType(String.class)) 
        .channel(MessageChannels.queue("APIResponseChannel")) 
        .get(); 

@Bean 
    HeaderMapper headerMapper() { 
     DefaultHttpHeaderMapper headerMapper = new DefaultHttpHeaderMapper(); 
     String[] headerNames = {"payment-hdr1","payment-hdr2"}; 
     headerMapper.setOutboundHeaderNames(headerNames); 

     headerMapper.setUserDefinedHeaderPrefix(""); 
     return headerMapper; 
    } 

Antwort

0
return IntegrationFlows.from("FileContentChannel") 
      .enrichHeaders(h -> h.header("foo1", "bar") 
            .header("foo2", "baz")) 
      .handle(Http.outboundGateway("http://host:port/paymentinfo/") 
        .charset("UTF-8") 
        .httpMethod(HttpMethod.GET) 
        .mappedRequestHeaders("foo*") 
        .expectedResponseType(String.class)) 
      .channel(MessageChannels.queue("APIResponseChannel")) 
      .get(); 

Benutzerdefinierte Header werden (derzeit) ein X- Präfix erhalten.

Um dies zu vermeiden, verwenden Sie eine benutzerdefinierte DefaultHeaderMapper, um die erforderlichen Header-Muster abzubilden, und verwenden Sie eine userDefinedHeaderPrefix von "".