当前位置: 首页 > 知识库问答 >
问题:

Spring整合:回归潮流

盖诚
2023-03-14

我对Spring集成非常陌生,并试图找出如何返回数据流,但找不到任何示例。我找到了关于ByTestStreamWritingMessageHandler的文档,但对我来说似乎有点模糊,并且没有提供使用示例(除了bean定义)。我假设我需要定义一个使用ByTestStreamWritingMessageHandler的通道,并在入站网关中引用它(通过回复通道),但我有一些问题:

首先,我说得对吗?我可以使用默认频道类型吗?我需要通道适配器吗?我可以从我的服务方法返回ByteArrayOutputStream吗?频道定义是什么样子的?

任何帮助都将不胜感激。

---------------更新-----------

我们当前的endpoint是这样结构的:

<int:channel id="httpReplyChannel"/>
<int:channel id="exampleService.exampleMethod"/>
<int-http:inbound-gateway path="/example"
                          supported-methods="POST"
                          request-channel="exampleService.exampleMethod"
                          request-payload-type="java.lang.Integer"
                          reply-channel="httpReplyChannel"
                          message-converters="jsonMessageConverter"
                          mapped-request-headers="*"/>
<int:service-activator input-channel="exampleService.exampleMethod"
                       ref="exampleService"
                       method="exampleMethod"/>

因此,我们使用两个通道,一个用于入站,一个用于出站,并使用http:inbound网关的reply channel属性来配置出站通道。我希望遵循相同的模式,但创建一个新的出站通道。我的问题是,我不确定哪种类型的通道最适合返回流。endpoint将直接向浏览器返回包含图像的a流(浏览器将通过HTML img标记发出请求)。因此,我需要exampleMethod返回一个流(ByteArrayOutputStream),并且需要能够根据返回的图像类型访问动态设置的头文件。

共有1个答案

华温书
2023-03-14

如果您说希望通过http入站适配器接收请求,并以某种方式打开一个流以输出多个数据,那么,不,这是当前不支持的。

Spring集成主要是一个消息传递框架,而不是流式框架。

您所引用的流适配器用于简单的单向集成。

所有网关都是严格要求/响应的。有某些适配器(如tcp)可以执行这种流式传输(使用协作的入站/出站适配器),但http空间中目前没有任何内容(尽管我们目前正在研究一些将来将支持这种传输的技术)。

编辑:回应下面的第一条评论

该问题/答案不是流式输出,而是在响应属性中返回字节[]。如果您想这样做,只需返回一条带有字节[]有效负载(以及相应的内容类型标题)的消息。

如果您真的希望您的服务获得对响应输出流的引用,不,您不能使用标准超文本传输协议网关做到这一点。但是,您可以使用一个简单的servlet/控制器并注入一个

public interface MyInterface {

    String foo(@Payload String request, @Header("stream") OutputStream stream);
}

使用service activator具有expression=“@fooService.bar(有效负载,头['stream'])”

 类似资料:
  • Spring + Mybatis 整合 本章节主要是介绍如何使用Spring + Mybatis 框架整合构建项目。 Spring-mybatis整合官方文档地址 http://www.mybatis.org/spring/zh/ 本教程的代码已经存放在code.aliyun.com上面 . 可以clone到本地 . 项目地址 : https://code.aliyun.com/lemypyl/s

  • 1.导入jar包 web.xml spring-security.xml

  • 主要内容:引入依赖,配置 MyBatis,创建实体类,创建 Mapper 接口,创建 Mapper 映射文件,示例 1,注解方式MyBatis 是一个半自动化的 ORM 框架,所谓半自动化是指 MyBatis 只支持将数据库查出的数据映射到 POJO 实体类上,而实体到数据库的映射则需要我们自己编写 SQL 语句实现,相较于Hibernate 这种完全自动化的框架,Mybatis 更加灵活,我们可以根据自身的需求编写 sql 语句来实现复杂的数据库操作。 随着 Spring Boot 越来越流行

  • Spring Boot 推荐使用 Thymeleaf 作为其模板引擎。SpringBoot 为 Thymeleaf 提供了一系列默认配置,项目中一但导入了 Thymeleaf 的依赖,相对应的自动配置 (ThymeleafAutoConfiguration) 就会自动生效,因此 Thymeleaf 可以与 Spring Boot 完美整合 。 Spring Boot 整合 Thymeleaf 模板

  • 1、maven 坐标 Spring 整合可以在pom.xml中配置 jfinal 坐标,也可以配置 Enjoy Template Engine 的独立发布版本坐标,其 maven 坐标如下: <dependency> <groupId>com.jfinal</groupId> <artifactId>enjoy</artifactId> <version>4.9.08</version

  • 一、前言 使用 Spring+Mybatis 操作 Phoenix 和操作其他的关系型数据库(如 Mysql,Oracle)在配置上是基本相同的,下面会分别给出 Spring/Spring Boot 整合步骤,完整代码见本仓库: Spring + Mybatis + Phoenix SpringBoot + Mybatis + Phoenix 二、Spring + Mybatis + Phoeni