【发布时间】:2019-03-10 22:17:24
【问题描述】:
在我的程序中添加HTTP.outboundGateway 标头的最简单方法是什么?
我想做的是:
我首先为URL 做HTTP GET
http://localhost:8050/session
然后我得到 JSON
{
"session": "session8050"
}
我提取session 变量的值并将其作为session 标头变量添加到下一个HTTP GET。
目前我有工作代码,但我想我可以更轻松地做到这一点吗?我的实现
-
使用
jsonPath方法从JSON 中提取session变量 -
然后实现使用
enrichHeaders方法将session变量添加到集成流消息头 -
然后实现将
session变量添加到带有HeaderMapper类的HTTP调用头中我的实现是
integrationFlowBuilder .transform(p -> authenticationJson) .enrichHeaders(h -> h.header("Content-Type", "application/json")) .handle(Http.outboundGateway("http://localhost:8050/session").httpMethod(HttpMethod.POST) .expectedResponseType(String.class)) .enrichHeaders( h -> h.headerExpression("session", "#jsonPath(payload, '$.session')", true) .handle(Http .outboundGateway(completeFromUrl) .httpMethod(HttpMethod.GET).mappedRequestHeaders("session").headerMapper(headerMapper()) .expectedResponseType(String.class))
我的headerMapper 是
@Bean
HeaderMapper headerMapper() {
final DefaultHttpHeaderMapper headerMapper = new DefaultHttpHeaderMapper();
final String[] headerNames = { "session" };
headerMapper.setOutboundHeaderNames(headerNames);
headerMapper.setUserDefinedHeaderPrefix("");
return headerMapper;
}
是否可以从 JSON 中提取会话变量并将其直接添加到 HTTP 标头中??
为什么必须使用HeaderMapper?为什么集成流消息标头不直接转到 HTTP.outboundGateway 调用作为有效负载?
【问题讨论】:
标签: spring spring-integration spring-integration-dsl