如何在Spring Boot中修改Mono对象的属性而不阻塞它

时间:2018-09-19 16:09:49

标签: java spring-boot reactive-programming spring-webflux

我最近开始使用反应式,并创建了一个使用反应式流的简单应用程序。

我有以下代码,可以通过empID获得一名员工。仅当将showExtraDetails布尔值设置为true时特别要求时,我才需要向我的API提供有关emplyee的其他详细信息。如果将其设置为false,则必须在返回employee对象之前将额外的详细信息设置为null。现在,我在流上使用一个块来实现此目的。是否可以不加阻塞地执行此操作,以便我的方法可以返回Mono。

以下是我完成的代码。

public Employee getEmployee(String empID, boolean showExtraDetails) {


    Query query = new Query();

    query.addCriteria(Criteria.where("empID").is(empID));


    Employee employee = reactiveMongoTemplate.findOne(query, Employee.class, COLLECTION_NAME).block();


    if (employee != null) {

        logger.info("employee {} found", empID);
    }


    if (employee != null && !showExtraDetails) {

        employee.getDetails().setExtraDetails(null);
    }

    return employee;

}  

1 个答案:

答案 0 :(得分:1)

尝试此操作,应假设reactiveMongoTemplate是您的mongo存储库

return reactiveMongoTemplate.findById(empID).map(employee -> {
            if (!showExtraDetails) {
              employee.getDetails().setExtraDetails(null);
            }
            return employee;                
        });