|
此版本仍在开发中,尚未被视为稳定版本。对于最新的稳定版本,请使用 Spring Integration 6.3.1! |
|
此版本仍在开发中,尚未被视为稳定版本。对于最新的稳定版本,请使用 Spring Integration 6.3.1! |
要通过 HTTP 接收消息,您需要使用 HTTP 入站通道适配器或 HTTP 入站网关。
要支持 HTTP 入站适配器,需要将它们部署在 Servlet 容器(如 Apache Tomcat 或 Jetty)中。
最简单的方法是使用 Spring 的 HttpRequestHandlerServlet,方法是在文件中提供以下 servlet 定义:web.xml
<servlet>
<servlet-name>inboundGateway</servlet-name>
<servlet-class>o.s.web.context.support.HttpRequestHandlerServlet</servlet-class>
</servlet>
请注意,servlet 名称与 Bean 名称匹配。
有关更多信息,请参阅 Javadocs。HttpRequestHandlerServlet
如果在 Spring MVC 应用程序中运行,则不需要上述显式 servlet 定义。 在这种情况下,网关的 Bean 名称可以与 URL 路径匹配,就像 Spring MVC 控制器 Bean 一样。 有关更多信息,请参阅 Web MVC 框架,它是 Spring Framework 参考文档的一部分。
| 有关示例应用程序和相应的配置,请参阅 Spring Integration Samples 存储库。 它包含 HTTP 示例应用程序,它演示了 Spring Integration 的 HTTP 支持。 |
以下示例 Bean 定义了一个 HTTP 入站端点:
<bean id="httpInbound"
class="org.springframework.integration.http.inbound.HttpRequestHandlingMessagingGateway">
<property name="requestChannel" ref="httpRequestChannel" />
<property name="replyChannel" ref="httpReplyChannel" />
</bean>
接受实例列表,否则依赖于默认列表。
转换器允许自定义从 到 的映射。
默认转换器封装了简单的策略,例如,这些策略为内容类型以 开头的请求创建一条消息。
有关完整的详细信息,请参阅 Javadoc。
可以设置一个额外的标志 () 以及自定义列表,以在自定义转换器之后添加默认转换器。
默认情况下,此标志设置为 ,这意味着自定义转换器将替换默认列表。HttpRequestHandlingMessagingGatewayHttpMessageConverterHttpServletRequestMessageStringPOSTtextmergeWithDefaultConvertersHttpMessageConverterfalse
消息转换过程使用(可选)属性和传入标头。
从版本 4.3 开始,如果请求没有内容类型标头,则假定为 。
以前,此类消息的正文被忽略。requestPayloadTypeContent-Typeapplication/octet-streamRFC 2616
Spring Integration 2.0 实现了多部分文件支持。
如果请求已包装为 ,则在使用默认转换器时,该请求将转换为有效负载,该有效负载包含的值可能是字节数组、字符串或 Spring 的实例,具体取决于各个部分的内容类型。MultipartHttpServletRequestMessageMultiValueMapMultipartFile
如果 bean 名称为 (与 Spring 的预期名称相同),则 HTTP 入站端点会在上下文中定位 a。
如果它确实找到了该 Bean,则会在入站请求映射器上启用对分段文件的支持。
否则,当它尝试将多部分文件请求映射到 Spring Integration 时,它将失败。
有关 Spring 对 的支持的更多信息,请参阅 Spring 参考手册。MultipartResolvermultipartResolverDispatcherServletMessageMultipartResolver |
|
如果您希望将 a 代理到另一台服务器,最好将其保留为原始形式。
要处理这种情况,请不要将 Bean 添加到上下文中。
将终结点配置为需要请求,自定义消息转换器以包含 ,并禁用默认的分段转换器。
您可能需要一些其他转换器来回复。
以下示例演示了这样的安排:
|
当您向客户端发送响应时,您可以通过多种方式自定义网关的行为。
默认情况下,网关通过发回状态代码来确认已收到请求。
可以通过提供要由 Spring MVC 解析的“viewName”来自定义此响应。
如果网关应该期望对 的回复,则可以设置标志(构造函数参数)以使网关在创建 HTTP 响应之前等待回复。
以下示例将网关配置为充当具有视图名称的 Spring MVC 控制器:200ViewResolverMessageexpectReplyMessage
<bean id="httpInbound"
class="org.springframework.integration.http.inbound.HttpRequestHandlingController">
<constructor-arg value="true" /> <!-- indicates that a reply is expected -->
<property name="requestChannel" ref="httpRequestChannel" />
<property name="replyChannel" ref="httpReplyChannel" />
<property name="viewName" value="jsonView" />
<property name="supportedMethodNames" >
<list>
<value>GET</value>
<value>DELETE</value>
</list>
</property>
</bean>
由于 的值,它等待回复。
前面的示例还演示了如何自定义网关接受的 HTTP 方法,这些方法默认为和默认。constructor-argtruePOSTGET
回复消息在模型映射中可用。 默认情况下,该映射条目的键为“reply”,但您可以通过在端点配置上设置“replyKey”属性来覆盖此默认值。
| 有关示例应用程序和相应的配置,请参阅 Spring Integration Samples 存储库。 它包含 HTTP 示例应用程序,它演示了 Spring Integration 的 HTTP 支持。 |
如果 bean 名称为 (与 Spring 的预期名称相同),则 HTTP 入站端点会在上下文中定位 a。
如果它确实找到了该 Bean,则会在入站请求映射器上启用对分段文件的支持。
否则,当它尝试将多部分文件请求映射到 Spring Integration 时,它将失败。
有关 Spring 对 的支持的更多信息,请参阅 Spring 参考手册。MultipartResolvermultipartResolverDispatcherServletMessageMultipartResolver |
|
如果您希望将 a 代理到另一台服务器,最好将其保留为原始形式。
要处理这种情况,请不要将 Bean 添加到上下文中。
将终结点配置为需要请求,自定义消息转换器以包含 ,并禁用默认的分段转换器。
您可能需要一些其他转换器来回复。
以下示例演示了这样的安排:
|
有效负载验证
从版本 5.2 开始,可以为 HTTP 入站端点提供一个,以便在发送到通道之前检查有效负载。
此有效载荷已经是转换和提取的结果,以缩小有关有价值数据的验证范围。
验证失败处理与我们在Spring MVC错误处理中完全相同。ValidatorpayloadExpression