Java 在单个对象中返回多个通量
我有多个列表作为来自不同数据库查询的Flux对象。 现在我想创建一个对象,在这里我可以将所有的Flux对象放入其中并返回给客户端 例如:Java 在单个对象中返回多个通量,java,spring-webflux,Java,Spring Webflux,我有多个列表作为来自不同数据库查询的Flux对象。 现在我想创建一个对象,在这里我可以将所有的Flux对象放入其中并返回给客户端 例如: public Mono<TestDto> getOverview() { Flux<TestResult> a = repo.findA(); Flux<TestResult> b = repo.findB(); Flux<TestResult> c = repo.fi
public Mono<TestDto> getOverview() {
Flux<TestResult> a = repo.findA();
Flux<TestResult> b = repo.findB();
Flux<TestResult> c = repo.findC();
Flux<TestResult> d = repo.findD();
// How can I create a single DTO from the 4 Flux objects?
return dto;
}
public class TestDto {
private Flux<TestResult> a;
private Flux<TestResult> b;
private Flux<TestResult> c;
private Flux<TestResult> d;
}
public Mono getOverview(){
通量a=回购金融资产();
通量b=repo.findB();
通量c=repo.findC();
通量d=回购协议findD();
//如何从4个Flux对象创建单个DTO?
返回dto;
}
公共类TestDto{
私人流量a;
私有流量b;
私有流量c;
私有流量d;
}
我的DTO显然不起作用,因为它返回的是Flux对象,而不是实际数据。根据最适合您的用例,这里有两种可能的方法 如果您希望有一个通过
Mono
以反应方式返回的TestDto
对象,请将DTO更改为包含列表而不是发布者,并为其提供一个all参数构造函数:
@AllArgsConstructor
public class TestDto {
private List<TestResult> a;
private List<TestResult> b;
private List<TestResult> c;
private List<TestResult> d;
}
以上可能是您想要的,也是最“正常”的方法。以下内容可能不是您想要的,但为了完整起见,将其包括在内
但是,如果您知道每个Flux
发布者将始终具有相同数量的元素,并且您希望将Flux
流式传输到客户端(其中每个单独的TestDto包含来自a、b、c和d的TestResult),那么您可以修改TestDto,使其仅包含每个TestResult的单个值:
@AllArgsConstructor
public class TestDto {
private TestResult a;
private TestResult b;
private TestResult c;
private TestResult d;
}
然后,您可以按如下方式通过压缩返回Flux
:
return Flux.zip((Object[] arr) ->
new TestDto((TestResult)arr[0],(TestResult)arr[1],(TestResult)arr[2],(TestResult)arr[3]), a, b, c, d);
第一种方法正是我想要的。尽管a、b、c和d都属于同一类型,但它们包含不同的骨料,并且彼此独立。谢谢你的帮助。
return Flux.zip((Object[] arr) ->
new TestDto((TestResult)arr[0],(TestResult)arr[1],(TestResult)arr[2],(TestResult)arr[3]), a, b, c, d);