添加HTTP最简单的方法是什么。我的程序中的outboundGateway头?
我想做的是:
我首先对URL执行HTTP GET
http://localhost:8050/session
然后我得到JSON
{
"session": "session8050"
}
我提取session变量的值,并将其添加到下一个HTTP GET作为session头变量。
目前我有工作代码,但我想我可以做得更容易吗?我的实现
>
然后,该实现使用enrichHeaders方法将session变量添加到集成流消息头中
然后,该实现使用HeaderMapper类将session变量添加到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集成与任何其他EIP解决方案一样的主要目标是使流中的组件尽可能隔离,因此在未来,您可以添加一些中间步骤或删除这些步骤,而不会对整个解决方案和集成流中的其他组件产生重大影响。这应该是关于为什么必须使用HeaderMapper的问题的答案。
正如您看到的HeaderMapper
的合约将MessageHeaders
重新映射到目标协议标头表示。没有关于payload
的内容,因此您需要首先将payload
中的值映射到标头中。然后说Http.outboundGateway()
应该从MessageHeaders
重新映射到HttpHeaders
中的内容。
默认情况下,DefaultHttpHeaderMapper(它位于Http.outboundGateway()中)只映射适合Http请求的标准Http头。
如果您需要包含一些自定义标头,例如在您的会话
中,您确实可以为DefaultHttpHeaderMapper
使用自定义配置,或者只需在Http.outboundGateway()
上配置一个方便的选项:
.mappedRequestHeaders("session")
从版本5.0
中不需要setUserDefedHeaderPrefix(")
。它现在默认为空字符串,因为HTTP协议中的前缀中没有自定义标头的要求。
我正在尝试使用< code >传递一些自定义的HTTP头 我试过两种配置。第一个具有“< code > mapped-request-headers ”属性: 第二个具有“”属性,具有相对配置: 但在这两种情况下,远程应用程序加载的消息头如下: 没有我试图添加到请求消息中的“test”头的跟踪。 向 中? 事实上,标题似乎在GenericMessage中“消失”了: 我不明白为什么HTTP请求中会
我尝试使用以下代码,得到了回应:状态:405方法不允许。这是我的Http请求:http://localhost:8090/services/test?name=test.代码或http请求有什么问题?
我无法解决这个问题,现在已经坚持了很长时间。我是一个spring-integration-dsl的初学者,任何帮助都将非常感谢。
我正在使用TestRestTemplate对我们的产品进行集成测试。 我有一个测试如下: 此特定请求需要一个标头值。有人能告诉我如何向TestRestTemplate调用添加标题吗?
如何在下面的JUnit类中运行integrationFlow?目前出现了例外情况 因为整合流没有启动。 JUnit类: }
我已经建立了一个简单的Spring集成流程,该流程由以下步骤组成: 然后定期轮询一个rest api 对有效载荷做一些处理 并将其置于Kafka主题上。 请遵守以下代码: 这非常有效,然而,我正在努力想出一些好的测试。 我应该如何模拟外部RESTAPI