本节描述了 Spring 集成的 HTTP 出站组件。
用HttpRequestExecutingMessageHandler
要配置 ,请编写类似于以下内容的 bean 定义:HttpRequestExecutingMessageHandler
<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 请求正文。
您可以配置这些转换器以及要使用的实例,如下例所示:RestTemplate
HttpMessageConverter
Message
ClientHttpRequestFactory
<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 Client 的使用,您可以注入 (如前所示)。SimpleClientHttpRequestFactory
HttpURLConnection
CommonsClientHttpRequestFactory
对于出站网关,网关生成的回复消息包含请求消息中存在的所有消息标头。 |
对于出站网关,网关生成的回复消息包含请求消息中存在的所有消息标头。 |
使用 Cookie
基本 cookie 支持由出站网关上的属性提供。
当设置为 (default is ) 时,在响应中从服务器接收的报头将转换为回复消息中的报头。
然后,此标头将用于后续发送。
这可实现简单的有状态交互,例如:transfer-cookies
true
false
Set-Cookie
Cookie
…→logonGateway→…→doWorkGateway→…→logoffGateway→…
如果为 ,则收到的任何报头都保持与回复消息中的相同,并在后续发送时被丢弃。transfer-cookies
false
Set-Cookie
Set-Cookie
空响应正文
HTTP 是一种请求-响应协议。
但是,响应可能没有正文,只有标头。
在这种情况下,它会生成一个有效载荷为 的回复,而不管提供的任何 .
根据 HTTP RFC 状态代码定义,有许多状态要求响应不得包含消息正文(例如)。
在某些情况下,对同一 URL 的调用可能会也可能不会返回响应正文。
例如,对 HTTP 资源的第一个请求返回 content,但第二个请求不返回 (返回 a )。
但是,在所有情况下,都会填充消息标头。
这可以在 HTTP 出站网关之后的某些路由逻辑中使用。
您还可以使用 '<payload-type-router/>' 将带有 a 的消息路由到与用于具有正文的响应不同的流。 |
预期响应类型
进一步说明空响应正文,如果响应确实包含正文,则必须提供适当的属性,否则,您会收到一个没有正文的 。
必须与响应中的(已配置或默认)实例和标头兼容。
这可以是抽象类,甚至可以是接口(例如,当您使用 Java serialization 和 时)。 |
从版本 5.5 开始,它公开了一个标志(默认情况下)以仅返回响应正文,或将整体作为回复消息有效负载返回,独立于提供的 .
如果 中不存在正文,则忽略此标志并返回整体。HttpRequestExecutingMessageHandler
extractResponseBody
true
ResponseEntity
expectedResponseType
ResponseEntity
ResponseEntity
空响应正文
HTTP 是一种请求-响应协议。
但是,响应可能没有正文,只有标头。
在这种情况下,它会生成一个有效载荷为 的回复,而不管提供的任何 .
根据 HTTP RFC 状态代码定义,有许多状态要求响应不得包含消息正文(例如)。
在某些情况下,对同一 URL 的调用可能会也可能不会返回响应正文。
例如,对 HTTP 资源的第一个请求返回 content,但第二个请求不返回 (返回 a )。
但是,在所有情况下,都会填充消息标头。
这可以在 HTTP 出站网关之后的某些路由逻辑中使用。
您还可以使用 '<payload-type-router/>' 将带有 a 的消息路由到与用于具有正文的响应不同的流。 |
预期响应类型
进一步说明空响应正文,如果响应确实包含正文,则必须提供适当的属性,否则,您会收到一个没有正文的 。
必须与响应中的(已配置或默认)实例和标头兼容。
这可以是抽象类,甚至可以是接口(例如,当您使用 Java serialization 和 时)。 |