繁体   English   中英

在单个 object 中返回多个通量

[英]Return multiple Flux in a single object

我有多个列表作为来自不同数据库查询的 Flux 对象。 现在我想创建一个 object,我可以将所有 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;
}

我的 DTO 显然不起作用,因为它返回的是 Flux object 但不是实际数据。

这里有两种可能的方法,具体取决于最适合您的用例。

如果您想拥有一个通过Mono<TestDto>响应式返回的TestDto object ,则将您的 DTO 更改为包含列表而不是发布者,并为其提供一个全参数构造函数:

@AllArgsConstructor
public class TestDto {
  private List<TestResult> a;
  private List<TestResult> b;
  private List<TestResult> c;
  private List<TestResult> d;
}

...然后您可以使用Mono.zip()collectList()来返回Mono<TestDto> ,如下所示:

return Mono.zip(arr -> new TestDto((List<TestResult>)arr[0],(List<TestResult>)arr[1],(List<TestResult>)arr[2],(List<TestResult>)arr[3]), a.collectList(), b.collectList(), c.collectList(), d.collectList());

以上可能是您想要的,并且是最“正常”的方法。 以下可能不是您所追求的,但为了完整起见,将其包括在内。

但是,如果您知道每个Flux发布者将始终具有相同数量的元素,并且您希望响应式 stream a Flux<TestDto>到客户端(其中每个单独的 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<TestDto> ,如下所示:

return Flux.zip((Object[] arr) ->
  new TestDto((TestResult)arr[0],(TestResult)arr[1],(TestResult)arr[2],(TestResult)arr[3]), a, b, c, d);

转换通量<document>到通量<object>或列表<object><div id="text_translate"><p>我有一个 object</p><pre> class Employee { private String salary; private String empId; private String departmentId; private String status; }</pre><p> 以及一种返回 Flux &lt;Document&gt; 的方法,例如</p><pre>[ { "empId": "B123", "salary": "1000", "departmentId": "winna", "status": "START" }, { "empId": "A123", "salary": "2000", "departmentId": "dinna", "status": "COMPLETED" } ]</pre><p> 如何在 JAVA 中将 Flux &lt;Document&gt; 转换为 Flux &lt;Employee&gt; 或 List &lt;Employee&gt;?</p></div></object></object></document>

[英]Convert Flux<Document> to Flux<Object> or List<Object>

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM