spring 集成 dsl http 出站网关
spring integration dsl http outboundgateway
我们正在尝试使用 DSL 使用 HTTP OutboundGateway 调用 REST API。我们能够使用 GET 和 POST 进行调用并按预期获得响应。然而,我们无法想出一种在使用 DSL 进行此调用时传递 http headers 的方法。有很多关于 XML 方法的文章,但无法找到 DSL
的文档
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();
我们也尝试使用 DefaultHttpHeaderMapper,但没有成功。你能指导我们吗?
感谢加里..它用这个
更新1
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;
}
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();
自定义 header 将(当前)获得 X-
前缀。
为避免这种情况,请使用自定义的 DefaultHeaderMapper
映射所需的 header 模式并使用 ""
的 userDefinedHeaderPrefix
。
我们正在尝试使用 DSL 使用 HTTP OutboundGateway 调用 REST API。我们能够使用 GET 和 POST 进行调用并按预期获得响应。然而,我们无法想出一种在使用 DSL 进行此调用时传递 http headers 的方法。有很多关于 XML 方法的文章,但无法找到 DSL
的文档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();
我们也尝试使用 DefaultHttpHeaderMapper,但没有成功。你能指导我们吗?
感谢加里..它用这个 更新1
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;
}
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();
自定义 header 将(当前)获得 X-
前缀。
为避免这种情况,请使用自定义的 DefaultHeaderMapper
映射所需的 header 模式并使用 ""
的 userDefinedHeaderPrefix
。