本节介绍 Spring Integration 的 HTTP 出站组件。Spring中文文档

HttpRequestExecutingMessageHandler

要配置 ,请编写类似于以下内容的 Bean 定义:HttpRequestExecutingMessageHandlerSpring中文文档

<bean id="httpOutbound"
  class="org.springframework.integration.http.outbound.HttpRequestExecutingMessageHandler">
  <constructor-arg value="http://localhost:8080/example" />
  <property name="outputChannel" ref="responseChannel" />
</bean>

此 Bean 定义通过委托给 . 反过来,该模板委托给实例列表,以从有效负载生成 HTTP 请求正文。 您可以配置这些转换器以及要使用的实例,如以下示例所示:RestTemplateHttpMessageConverterMessageClientHttpRequestFactorySpring中文文档

<bean id="httpOutbound"
  class="org.springframework.integration.http.outbound.HttpRequestExecutingMessageHandler">
  <constructor-arg value="http://localhost:8080/example" />
  <property name="outputChannel" ref="responseChannel" />
  <property name="messageConverters" ref="messageConverterList" />
  <property name="requestFactory" ref="customRequestFactory" />
</bean>

默认情况下,HTTP 请求是使用 的实例生成的,该实例使用 JDK 。 Apache Commons HTTP 客户端也支持通过 ,您可以注入该客户端(如前所述)。SimpleClientHttpRequestFactoryHttpURLConnectionCommonsClientHttpRequestFactorySpring中文文档

对于出站网关,网关生成的回复消息包含请求消息中存在的所有消息标头。
对于出站网关,网关生成的回复消息包含请求消息中存在的所有消息标头。

使用Cookie

基本 Cookie 支持由出站网关上的属性提供。 当设置为(默认值为 )时,响应中从服务器接收的标头将转换为回复消息中的标头。 然后,此标头用于后续发送。 这支持简单的有状态交互,如下所示:transfer-cookiestruefalseSet-CookieCookieSpring中文文档

…​→logonGateway→…​→doWorkGateway→…​→logoffGateway→…​Spring中文文档

如果为 ,则接收到的任何标头都与回复消息中一样,并在后续发送时被丢弃。transfer-cookiesfalseSet-CookieSet-CookieSpring中文文档

空响应正文

HTTP 是一种请求-响应协议。 但是,响应可能没有正文,只有标头。 在这种情况下,将生成有效负载为 的回复,而不管提供的任何 . 根据 HTTP RFC 状态代码定义,有许多状态要求响应不得包含消息正文(例如,)。 在某些情况下,对同一 URL 的调用可能会也可能不会返回响应正文。 例如,对 HTTP 资源的第一个请求返回内容,但第二个请求不返回内容(返回 )。 但是,在所有情况下,都会填充邮件头。 这可以在 HTTP 出站网关之后的某些路由逻辑中使用。 您还可以使用“<payload-type-router/>”将带有 a 的消息路由到与用于使用正文响应不同的流。HttpRequestExecutingMessageHandlerMessageorg.springframework.http.ResponseEntityexpected-response-type204 No Content304 Not Modifiedhttp_statusCodeResponseEntitySpring中文文档

expected-response-type

除了前面关于空响应正文的注释之外,如果响应确实包含正文,则必须提供适当的属性,否则,您再次收到没有正文的属性。 必须与响应中的(已配置或默认)实例和标头兼容。 这可以是一个抽象类,甚至可以是一个接口(例如,当您使用 Java 序列化和 时)。expected-response-typeResponseEntityexpected-response-typeHttpMessageConverterContent-Typejava.io.SerializableContent-Type: application/x-java-serialized-objectSpring中文文档

从版本 5.5 开始,公开一个标志(默认情况下)以仅返回响应正文,或将整个作为回复消息有效负载返回,独立于提供的 . 如果 中不存在正文,则忽略此标志并返回整体。HttpRequestExecutingMessageHandlerextractResponseBodytrueResponseEntityexpectedResponseTypeResponseEntityResponseEntitySpring中文文档

空响应正文

HTTP 是一种请求-响应协议。 但是,响应可能没有正文,只有标头。 在这种情况下,将生成有效负载为 的回复,而不管提供的任何 . 根据 HTTP RFC 状态代码定义,有许多状态要求响应不得包含消息正文(例如,)。 在某些情况下,对同一 URL 的调用可能会也可能不会返回响应正文。 例如,对 HTTP 资源的第一个请求返回内容,但第二个请求不返回内容(返回 )。 但是,在所有情况下,都会填充邮件头。 这可以在 HTTP 出站网关之后的某些路由逻辑中使用。 您还可以使用“<payload-type-router/>”将带有 a 的消息路由到与用于使用正文响应不同的流。HttpRequestExecutingMessageHandlerMessageorg.springframework.http.ResponseEntityexpected-response-type204 No Content304 Not Modifiedhttp_statusCodeResponseEntitySpring中文文档

expected-response-type

除了前面关于空响应正文的注释之外,如果响应确实包含正文,则必须提供适当的属性,否则,您再次收到没有正文的属性。 必须与响应中的(已配置或默认)实例和标头兼容。 这可以是一个抽象类,甚至可以是一个接口(例如,当您使用 Java 序列化和 时)。expected-response-typeResponseEntityexpected-response-typeHttpMessageConverterContent-Typejava.io.SerializableContent-Type: application/x-java-serialized-objectSpring中文文档