Reactive programming 如何从Mono SpringWebFlux返回对象

Reactive programming 如何从Mono SpringWebFlux返回对象,reactive-programming,spring-webflux,project-reactor,Reactive Programming,Spring Webflux,Project Reactor,我正在使用SpringWebFlux,成功保存后需要返回用户ID 存储库正在返回Mono Mono<User> savedUserMono = repository.save(user); Mono savedUserMono=repository.save(用户); 但从控制器,我需要返回用户ID,它位于save()调用返回的对象中 我尝试过使用doOn*和subscribe(),但当我使用returnfromsubscribe时,出现了一个错误“意外返回值”您所做的是 Mon

我正在使用SpringWebFlux,成功保存后需要返回用户ID

存储库正在返回Mono

Mono<User> savedUserMono = repository.save(user);
Mono savedUserMono=repository.save(用户);
但从控制器,我需要返回用户ID,它位于save()调用返回的对象中

我尝试过使用doOn*和subscribe(),但当我使用returnfromsubscribe时,出现了一个错误“意外返回值”

您所做的是

Mono<String> id = user.map(user -> {
        return user.getId();
    });
Mono id=user.map(用户->{
返回user.getId();
});

然后将
Mono
返回给客户端,如果您的id是一个字符串

每当您觉得需要将
Mono
中的内容转换或映射到其他内容时,就使用
map()
方法,传递一个lambda,该lambda将执行如下转换:

Mono<Integer> userId = savedUserMono.map(user -> user.getId());

订阅后,生成的
Mono
将发出用户ID。

查看此
用户ID
的可能重复项应为
Mono ID
是的,感谢您指出它,这有点太快了。为了可读性,我已经对其进行了编辑,我建议使用方法参考:
user.map(user::getId)
为了可读性,我说这更可读,你的建议不太可读,但我更喜欢。但是由于线程启动程序没有太多的经验,所以上面更详细的版本更容易理解。
Mono<Integer> userId = savedUserMono.map(User::getId);