当前位置: 首页 > 知识库问答 >
问题:

控制特定用例的反应器执行(或在特定点得到响应)

长孙朝明
2023-03-14

我试图在MongoDB中更新一个文档,但无法检查更新的状态并回复给用户。下面是我的代码:

@Autowired
ReactiveMongoTemplate mongoTemplate;

public Mono<String> updateUser(UserIn userIn) {
   UserResponse resp = new UserResponse();
   mongoTemplate.findAndModify(query, update, User.class)
        //.doOnSuccess(bsItem -> {
        .flatMap(user -> {
            if(user.getItemId().equals(userIn.getId("_id")))
                resp.setStatus("Updated");
            else
                resp.setStatus("Failed");
            return Mono.just(resp);
   }).subscribe();

return Mono.just(resp.getStatus());
}

即使在mongodb中发生了更新,它也会在返回时抛出NPE。Reactor操作员在这里执行后如何获得控制权?

共有1个答案

甄越
2023-03-14

您几乎不应该在自己的应用程序中订阅。

订阅方是发起调用的客户机,在本例中可能是web应用程序。您的应用程序只是中继数据,所以您的应用程序是一个发布者,这意味着您不应该订阅。web应用程序订阅。

试试这个。

@Autowired
ReactiveMongoTemplate mongoTemplate;

public Mono<String> updateUser(UserIn userIn) {
    return mongoTemplate.findAndModify(query, update, User.class)
        .flatMap(user -> {
            final UserResponse resp = new UserResponse();
            if(user.getItemId().equals(userIn.getId("_id")))
                resp.setStatus("Updated");
            else
                resp.setStatus("Failed");
            return Mono.just(resp.getStatus());
   });
}
 类似资料:
  • 我有一个BaseController,如下所示。 我在我的控制器中继承了这个基本控制器,如下所示。 可见,我在BaseController和TestController上都有OnActionExecutingContext(ActionExecutingContext filterContext)。实际上,我这样做的原因是我在基本控制器中管理许多从这个继承的每个控制器中需要的东西。 但现在我需要在

  • 在Laravel5.2中,我想将所有未定义的url路由到一个特定的控制器。 我正在开发类似CMS的功能,我想要这个东西。 所以url喜欢 www.domain.com/post/po-t/some/thing www.domain。com/profile 所以第一个url应该重定向到页面函数,第二个url应该重定向到配置文件函数 基本上,我想要一些关于N-number或参数的想法,因为在页面中,它

  • 我正在建立一个登录系统,我遇到了一些问题,我不知道如何解决。我用find()和findOne()尝试了一些不同的选项,但在我的情况下两者都不起作用。下面是我试图解决这个问题的第一个解决方案。 此解决方案返回catch响应:User Not found。 这是我尝试过的第二种解决方案: 此解决方案返回:无法将属性“username”设置为null。 在这两种情况下,我都发送此请求:,它是我知道存在于

  • 在中,据我所知,对象有一个默认的碰撞响应,可以让它们停止移动或反弹回来(如果您设置了恢复)。 您还可以说,该对象是一个传感器,因此您可以实现自己的碰撞响应。 现在我想对某些类型的碰撞使用默认的碰撞响应,而我想完全控制与特定对象的碰撞。 例如:如果玩家与墙壁相撞,则应该停止运动或反弹,但当他与子弹相撞时,它应该松动Hp,子弹应该被移除。 所以我想有类似于接触过滤器,但与过滤器不匹配的对象应该以默认行

  • 如何让机器人只响应我编写命令的特定通道

  • 如何将检查日期应用于此邮件,以避免不一致。如果工作日在东部时区上午9:30到下午4:00之间,js机器人不会响应“nio停机”?(股市时间) 请原谅我的密码。我是一个彻头彻尾的傻瓜,试图通过经验和实践来学习。我倾向于通过例子学习,而不是通过书本学习和阅读。一旦我对它有了更好的理解,然后我喜欢缩小范围,通读这些书来调整或纠正我的一些坏习惯,如果这是有意义的。