【问题标题】:How to retrieve data from Mono<T> on java如何从 java 上的 Mono<T> 检索数据
【发布时间】:2021-10-11 06:24:39
【问题描述】:

我有一个这样的实体:

public class Period implements Serializable {

    private static final long serialVersionUID = 1L;

    @Id
    private String id;
    private PeriodType type;
    private Date startDate;
    private Date endDate;
    private Long lastQuranId;
    private Long lastUvoiceId;
    private List<Integer> exclusiveContentTypeOrder;
}

我有

Mono<Period> periodMono = periodReactiveRepository.findOneByTypeAndStartDateLessThanEqualAndEndDateGreaterThanEqual(type,
                currentDate, currentDate);

我的问题是如果我想获得 StartDate 如何获得它?

我试过用这个

Date startDate = (Date) periodMono.subscribe(period-> period.getStartDate());

我的问题是这段代码是否正确?如果不是如何从我的Mono 获取StartDate

【问题讨论】:

  • 你可以使用yourMono.map(...)
  • 我必须在 .map() 上使用什么......我混淆了使用 yourMono.map(..) 你能解释一下吗?
  • 日期 startDate = periodMono.map(period -> { return period.getStartDate();});我用过这个,但我认为这是错误的......你能解释一下并举个例子吗

标签: java mongodb project-reactor


【解决方案1】:

拦截方式:

Mono 通过在某个时间点发射一个元素成功完成。

Date startDate = periodMono.block().getStartDate();

当你调用block方法时,它会一直阻塞直到结果到达。所以实际上你可能会错过反应式非阻塞特性。 要获得更多控制权,您还可以设置明确的持续时间。

非阻塞方式

正如您所提到的,您可以使用 subscribe() 方法以非阻塞方式获取。

periodMono.subscribe(period-> {Date startDate = period.getStartDate(); //continue ur operation });

您不能将 Disposable 转换为日期对象。 Ref

【讨论】:

    猜你喜欢
    • 2013-10-31
    • 2019-04-13
    • 2023-01-25
    • 2020-11-20
    • 2022-01-23
    • 1970-01-01
    • 2019-03-20
    • 2023-03-28
    • 1970-01-01
    相关资源
    最近更新 更多