Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/360.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在单个对象中返回多个通量_Java_Spring Webflux - Fatal编程技术网

Java 在单个对象中返回多个通量

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

我有多个列表作为来自不同数据库查询的Flux对象。 现在我想创建一个对象,在这里我可以将所有的Flux对象放入其中并返回给客户端

例如:

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