Java 从Postgres获取的流,jOOQ未从类返回结果 问题

Java 从Postgres获取的流,jOOQ未从类返回结果 问题,java,spring,postgresql,stream,jooq,Java,Spring,Postgresql,Stream,Jooq,我试图将postgres查询中的结果流式传输到前端应用程序,而不是急切地获取所有结果。问题是,我只能在我的终端中看到流式结果(即首先在“org.jooq.tools.LoggerListener:Record fetched:…”,然后使用stream.get().forEach(s->debug)),而引用此流的类在被调用以查看前端中的结果集时仅生成null值 该数据也可用于其他任务(例如可视化、下载/导出、汇总统计等)。我一直在浏览有关jOOQ的文档和帖子,我正在使用这些文档和帖子作为我的O

我试图将
postgres
查询中的
结果流式传输到前端应用程序,而不是急切地获取所有结果。问题是,我只能在我的终端中看到流式结果(即首先在
“org.jooq.tools.LoggerListener:Record fetched:…”
,然后使用
stream.get().forEach(s->debug)
),而引用此流的类在被调用以查看前端中的
结果集时仅生成
null

该数据也可用于其他任务(例如可视化、下载/导出、汇总统计等)。我一直在浏览有关
jOOQ
的文档和帖子,我正在使用这些文档和帖子作为我的ORM,我尝试使用以下方法:

急切地获取以下内容目前效果很好,但这将在一个巨大的
响应中返回所有内容
,并且不会流式传输结果:


当前类别 DataController.java

@RestController
@请求映射(value=“/v3”)
@验证
公共类数据控制器{
@自动连线专用查询服务;
@PostMapping(value=“/data”,products=MediaType.APPLICATION\u JSON\u UTF8\u value)
@ApiOperation(value=“查询数据”)
@ResponseStatus(HttpStatus.CREATED)
公共响应获取查询结果(
@RequestBody@ValidQuery,HttpServletRequest){
QueryResult res=queryService.search(查询);
返回响应度ok(res);
}
// ...
}
QueryResult.java

公共查询结果(流结果){
this.result=结果;
}
//public List getResult(){return result;}
@JsonProperty(“结果”)
公共流getResult(){return result;}
//public void setResult(列表结果){this.result=result;}
public void setResult(流结果){this.result=result;}
}
QueryService.java

@服务
公共类QueryService实现了SearchService{
@自动连线DefaultDSLContext;
公共查询结果搜索(查询查询){
LinkedHashMap selections=query.getSelections();
//生成选定字段
List selectFields=QueryUtils.getSelectionFields(选择);
//当前支持单个查询。传递的所有其他查询都将被忽略
List filters=query.getFilters();
Filter leadingFilter=QueryUtils.getLeadingFilter(过滤器);
//建立“何处”条件
Condition conditionClause=QueryUtils.getConditionClause(leadingFilter);
//获取“from”语句
Table fromClause=QueryUtils.getFromStatement(fromDataSource,query.getJoins());
/*
//工作正常,但不是懒惰的抓取
列出结果=
dslContext
.选择(选择字段)
.from(from子句)
.其中(条件条款)
.limit(query.getOffset(),query.getLimit())
.fetchMaps();
*/
//似乎只工作一次。
//无法看到返回的任何结果,但记录数正确。
//记录中的所有内容在前端都为空/未定义
供应商结果=()->
dslContext
.选择(选择字段)
.from(from子句)
.其中(条件条款)
.limit(query.getOffset(),query.getLimit())
.fetchStream();
//使用供应商时返回“流已被操作或关闭”
results.get().forEach->logger.debug(“流记录:\n”+String.valueOf(s));
返回新的QueryResult(results.get());
}
}
Query.java

公共类查询{
@NotNull(message=“查询必须包含选择项”)
私有LinkedHashMap选择;
私有列表过滤器;
私有列表连接;
私有列表排序;
私人长偏移量;
私有整数限制;
私人查询选项;
@JsonProperty(“选择”)
公共LinkedHashMap getSelections(){
返回选择;
}
公共选举(LinkedHashMap选择){
this.selections=选择;
}
@JsonProperty(“过滤器”)
公共列表getFilters(){
回流过滤器;
}
公共无效设置过滤器(列表过滤器){
this.filters=过滤器;
}
@JsonProperty(“连接”)
公共列表getJoins(){
返回连接;
}
公共void集合联接(列表联接){
this.joins=连接;
}
@JsonProperty(“排序”)
公共列表getSorts(){
返回排序;
}
公共无效集合排序(列表排序){
this.sorts=排序;
}
@JsonProperty(“期权”)
公共查询选项getOptions(){
返回选项;
}
公共无效设置选项(查询选项选项){
this.options=选项;
}
@JsonProperty(“偏移量”)
公共长getOffset(){
返回偏移量;
}
公共void setOffset(长偏移){
这个偏移量=偏移量;
}
@JsonProperty(“限制”)
公共int getLimit(){
退货限额;
}
公共无效设置限制(整数限制){
这个极限=极限;
}
@凌驾
公共字符串toString(){
返回“查询{”
+“选择数=”+选择数
+“,filters=“+过滤器”
+“,sorts=“+排序”
+“,offSet=“+offSet
+“,limit=“+limit”
+“,options=“+选项”
+ '}';
}
}
DataApi.js

/。。。
const dataApi=axios.create({baseURL:`${my_data_url}`,});
// ...
导出默认数据API;
Data.jsx

/。。。
//该块查询Spring,并返回ResponseEntity和ResultSet
//流式处理返回正确数量的记录,但每个记录都为空/未定义
试一试{
const response=wait dataApi.post('/v3/data',query);
}捕获(错误){
// ...
}
// ...
{data: {…}, status: 200, statusText: "OK", headers: {…}, config: {…}, …} data: result: Array(100) 0: {} 1: {} 2: {} 3: {} ...