该版本仍在开发中,尚未被视为稳定。对于最新的稳定版本,请使用 Spring Integration 7.0.0spring-doc.cadn.net.cn

Http 入站组件

要通过HTTP接收消息,你需要使用HTTP入站通道适配器或HTTP入站网关。 为了支持 HTTP 入站适配器,它们需要部署在 Servlet 容器中,如 Apache TomcatJetty。 最简单的方法是使用 Spring 的HttpRequestHandlerServlet,通过提供以下servlet定义web.xml文件:spring-doc.cadn.net.cn

<servlet>
    <servlet-name>inboundGateway</servlet-name>
    <servlet-class>o.s.web.context.support.HttpRequestHandlerServlet</servlet-class>
</servlet>

注意servlet名称与豆子名称相符。 更多信息请参见HttpRequestHandlerServletJavadocs。spring-doc.cadn.net.cn

如果你是在 Spring MVC 应用中运行,那么上述显式 servlet 定义就不是必需的。 在这种情况下,你的网关豆名可以像匹配 Spring MVC 控制器豆一样,与 URL 路径匹配。 更多信息请参见 Web MVC 框架,该框架是 Spring Framework 参考文档的一部分。spring-doc.cadn.net.cn

关于示例应用和相应配置,请参见 Spring 集成示例仓库。 它包含 HTTP 示例应用,展示了 Spring Integration 对 HTTP 的支持。

以下示例豆定义了HTTP入站端点:spring-doc.cadn.net.cn

<bean id="httpInbound"
  class="org.springframework.integration.http.inbound.HttpRequestHandlingMessagingGateway">
  <property name="requestChannel" ref="httpRequestChannel" />
  <property name="replyChannel" ref="httpReplyChannel" />
</bean>

HttpRequestHandlingMessagingGateway接受以下列表HttpMessage转换器实例或其他方式依赖默认列表。 转换器允许自定义映射HttpServletRequest消息. 默认转换器封装了简单的策略,例如创建字符串给 a 的消息发布请求内容类型以文本. 详情请参见 Javadoc。 一面额外的旗帜(mergeWithDefaultConverters)可以与自定义列表一起设置HttpMessage转换器在自定义转换器后添加默认转换器。 默认情况下,该标志设置为false,意味着自定义转换器取代了默认列表。spring-doc.cadn.net.cn

消息转换过程使用(可选)requestPayloadType财产与入门内容类型页眉。 从版本4.3开始,如果请求没有内容类型头部,应用/八位元组流假设,推荐如下RFC 2616. 此前,这类信息的正文被忽视。spring-doc.cadn.net.cn

Spring Integration 2.0 实现了多部分文件支持。 如果请求被打包为MultipartHttpServletRequest当你使用默认转换器时,该请求会被转换为消息有效载荷为多价值地图包含的值可能是字节数组、字符串,或 Spring 的实例多部分文件,取决于各个部分的内容类型。spring-doc.cadn.net.cn

HTTP 入站端点定位MultipartResolver在上下文中,如果有一个Beans名称multipartResolver(这也是Spring's预期的名字调度器服务). 如果找到了该豆子,入站请求映射器会启用多部分文件支持。 否则,当它尝试将多部分文件请求映射到 Spring 集成时,就会失败消息. 关于春季支持的更多内容MultipartResolver,参见《春季参考手册》。

如果你想代理多部分/形式-数据对其他服务器来说,保持原始状态可能更好。 为了处理这种情况,不要添加multipartResolver说说背景。 配置端点以期望字节[]请求,定制消息转换器以包含字节数组HttpMessage转换器,并禁用默认的多段转换器。 回复可能需要其他转换器。 以下示例展示了这样的安排:spring-doc.cadn.net.cn

<int-http:inbound-gateway
                  channel="receiveChannel"
                  path="/inboundAdapter.htm"
                  request-payload-type="byte[]"
                  message-converters="converters"
                  merge-with-default-converters="false"
                  supported-methods="POST" />

<util:list id="converters">
    <beans:bean class="org.springframework.http.converter.ByteArrayHttpMessageConverter" />
    <beans:bean class="org.springframework.http.converter.StringHttpMessageConverter" />
    <beans:bean class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter" />
</util:list>

当你向客户端发送响应时,你可以用多种方式自定义网关的行为。 默认情况下,网关通过发送200状态码返回。 可以通过提供“viewName”来自定义该响应,由Spring MVC解析ViewResolver. 如果网关应该期待收到回复消息,你可以设置期待回复标志(构造函数参数)使网关等待回复消息然后才创建 HTTP 响应。 以下示例配置网关作为带有视图名称的Spring MVC控制器:spring-doc.cadn.net.cn

<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>

因为构造者-ARGtrue它在等待回复。 前面的例子还展示了如何定制网关接受的HTTP方法,这些方法包括发布获取默认。spring-doc.cadn.net.cn

回复消息可在模型地图中查看。 默认情况下,该映射条目的密钥是“reply”,但你可以通过在端点配置中设置“replyKey”属性来覆盖这个默认。spring-doc.cadn.net.cn

有效载荷验证

从5.2版本开始,HTTP入站端点可以配备验证器在发送到通道前检查有效载荷。 这些有效载荷已经是转换和提取的产物payloadExpression缩小对有价值数据的验证范围。 验证失败处理与我们在 Spring MVC 错误处理中完全相同。spring-doc.cadn.net.cn