|
此版本仍在开发中,尚未被视为稳定版本。对于最新的稳定版本,请使用 Spring Integration 6.4.0! |
Http 入站组件
要通过 HTTP 接收消息,您需要使用 HTTP 入站通道适配器或 HTTP 入站网关。
要支持 HTTP 入站适配器,需要将它们部署在 servlet 容器(如 Apache Tomcat 或 Jetty)中。
最简单的方法是使用 Spring 的HttpRequestHandlerServlet,通过在web.xml文件:
<servlet>
<servlet-name>inboundGateway</servlet-name>
<servlet-class>o.s.web.context.support.HttpRequestHandlerServlet</servlet-class>
</servlet>
请注意,Servlet 名称与 Bean 名称匹配。
有关更多信息,请参阅HttpRequestHandlerServletJavadocs 的 Java 文档。
如果你在 Spring MVC 应用程序中运行,那么上述显式 servlet 定义就不是必需的。 在这种情况下,网关的 Bean 名称可以与 URL 路径匹配,就像对 Spring MVC 控制器 Bean 所做的那样。 有关更多信息,请参阅 Web MVC 框架,它是 Spring 框架参考文档的一部分。
| 有关示例应用程序和相应的配置,请参阅 Spring 集成示例存储库。 它包含 HTTP 示例应用程序,该应用程序演示了 Spring 集成的 HTTP 支持。 |
以下示例 Bean 定义了一个 HTTP 入站端点:
<bean id="httpInbound"
class="org.springframework.integration.http.inbound.HttpRequestHandlingMessagingGateway">
<property name="requestChannel" ref="httpRequestChannel" />
<property name="replyChannel" ref="httpReplyChannel" />
</bean>
这HttpRequestHandlingMessagingGateway接受HttpMessageConverterinstances 否则依赖于 default 列表。
转换器允许自定义HttpServletRequest自Message.
默认转换器封装了简单的策略,例如,这些策略会创建一个Stringmessage 的POST内容类型开头的请求text.
有关完整详细信息,请参阅 Javadoc。
附加标志 (mergeWithDefaultConverters) 可以与 list 一起设置自定义HttpMessageConverter以在 Custom Converters(自定义转换器)之后添加 Default Converters(默认转换器)。
默认情况下,此标志设置为false,这意味着自定义转换器将替换默认列表。
消息转换过程使用(可选)requestPayloadType属性和传入的Content-Type页眉。
从版本 4.3 开始,如果请求没有内容类型标头,application/octet-stream假设,如RFC 2616.
以前,此类消息的正文被忽略。
Spring Integration 2.0 实现了多部分文件支持。
如果请求已包装为MultipartHttpServletRequest,当您使用默认转换器时,该请求将转换为Messagepayload 的MultiValueMap包含的值可以是字节数组、字符串或 Spring 的MultipartFile,具体取决于各个部分的内容类型。
HTTP 入站端点会找到一个MultipartResolver在上下文中,如果 bean 名称为multipartResolver(与 Spring 的DispatcherServlet).
如果它确实找到了该 bean,则会在入站请求映射器上启用对 multipart 文件的支持。
否则,当它尝试将 multipart 文件请求映射到 Spring 集成时,它将失败Message.
有关 Spring 对MultipartResolver,请参阅 Spring Reference Manual。 |
|
如果您希望代理
|
当您向客户端发送响应时,您可以通过多种方式自定义网关的行为。
默认情况下,网关通过发送200状态代码返回。
可以通过提供 Spring MVC 解析的 'viewName' 来自定义此响应ViewResolver.
如果网关应该期望收到对Message中,您可以设置expectReplyflag(构造函数参数)使网关等待回复Message在创建 HTTP 响应之前。
下面的示例将网关配置为用作具有视图名称的 Spring MVC 控制器:
<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>
由于constructor-arg的值true,则等待回复。
前面的示例还显示了如何自定义网关接受的 HTTP 方法,这些方法是POST和GET默认情况下。
回复消息在模型映射中可用。 默认情况下,该映射条目的键是 'reply',但您可以通过在终端节点的配置上设置 'replyKey' 属性来覆盖此默认值。
有效载荷验证
从版本 5.2 开始,HTTP 入站端点可以被提供Validator在发送到通道之前检查 payload。
此有效负载已经是 after 转换和提取的结果payloadExpression缩小与有价值数据相关的验证范围。
验证失败的处理与我们在 Spring MVC 错误处理中的处理完全相同。