如何从 Mono SpringWebFlux 返回对象

Nit*_*706 5 reactive-programming project-reactor spring-webflux

我正在使用Spring Webflux,我需要在成功保存后返回用户的ID。

存储库正在返回 Mono

Mono<User> savedUserMono = repository.save(user);
Run Code Online (Sandbox Code Playgroud)

但是从控制器中,我需要返回 save() 调用返回的对象中的用户 ID。

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

Mic*_*rry 5

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

Mono<Integer> userId = savedUserMono.map(user -> user.getId());
Run Code Online (Sandbox Code Playgroud)

(当然,假设您的用户有一个getId()方法,并且id是一个整数。)

在这个简单的情况下,您还可以选择使用双冒号语法以获得更简洁的语法:

Mono<Integer> userId = savedUserMono.map(User::getId);
Run Code Online (Sandbox Code Playgroud)

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


Tho*_*olf 2

你所做的是

Mono<String> id = user.map(user -> {
        return user.getId();
    });
Run Code Online (Sandbox Code Playgroud)

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

  • 为了便于阅读,我建议使用方法参考:`user.map(User::getId)` (2认同)
  • 对于可读性,我说这更具可读性,你的建议可读性较差,但我更喜欢。但由于线程启动者似乎没有太多经验,所以上面的更详细的版本更容易理解。 (2认同)