如何将请求标头添加到 outboundGateway spring integration dsl

Posted

技术标签:

【中文标题】如何将请求标头添加到 outboundGateway spring integration dsl【英文标题】:How to add request headers to outboundGateway spring integration dsl 【发布时间】:2018-10-15 00:31:57 【问题描述】:

我在 spring 集成 dsl 中找不到向 outboundGateway 添加标头的功能。

.handle(outboundGateway("localhost:8080/search")
       .httpMethod(HttpMethod.GET)
       .expectedResponseType(Order.class))

我想添加到请求的标题是

HttpHeaders headers = new HttpHeaders();
headers.setAccept(newArrayList(APPLICATION_JSON));
headers.setContentType(APPLICATION_JSON);
headers.add("Client-Id", "test");

有人可以帮我吗

【问题讨论】:

【参考方案1】:

没错:Spring Integration 不允许直接操作 HttpHeaders 对象。相反,您应该遵循规范的消息传递方法 - 无协议 .enrichHeaders()

.enrichHeaders(e -> e
                        .header(DefaultHttpHeaderMapper.ACCEPT, APPLICATION_JSON)
                        .header(DefaultHttpHeaderMapper.CONTENT_TYPE, APPLICATION_JSON)
                        .header("Client-Id", "test"))
.handle(outboundGateway("localhost:8080/search")
   .httpMethod(HttpMethod.GET)
   .expectedResponseType(Order.class))

【讨论】:

对不起,这些标头没有传递给客户端,我的wiremock抱怨说“标头不存在”以匹配存根。 我通过将 .mappedRequestHeaders("Client-Id", DefaultHttpHeaderMapper.ACCEPT, DefaultHttpHeaderMapper.CONTENT_TYPE) 添加到 outboundGateway 使其工作 或者你可以使用*。抱歉,一直很忙,但很高兴您在没有帮助的情况下解决了这个问题! 无论如何感谢您的帮助,我不想使用 * 因为我有一些我不想发送给客户端的流标头变量

以上是关于如何将请求标头添加到 outboundGateway spring integration dsl的主要内容,如果未能解决你的问题,请参考以下文章

如何将承载令牌添加到 HTTP 请求的标头?

如何将 JSON 字符串添加到 HTTP 请求标头?

如何将自定义 HTTP 请求标头添加到 Thymeleaf 生成的表单或链接?

如何将 Django 的 CSRF 令牌添加到 jQuery POST 请求的标头?

如何将授权标头添加到用户请求并使用 express 将其代理到另一个服务器 api

Guzzle HTTP - 将授权标头直接添加到请求中