将 Mono/Flux 中的值传递给方法

Pass value from Mono/Flux to methods

我是响应式编程概念的新手。我正在关注 "Learning Spring Boot 2.0" 并且所描述的简单 concepts/examples 是可以理解的。但是我不知道如何在更复杂的用例中使用 Mono/Flux 。 spring 引导、mongo 和项目反应堆

的一些示例

我的模型

User
@Id
private String id;
private String login;

Comment
@Id
private ObjectId _id;
private String content;
private String ownerLogin;

所以这个获取所有者评论的简单示例工作正常

@GetMapping(params = "login")
@ResponseBody
public Flux<Comment> getAllCommentsByLogin(@RequestParam("login") String login) {
    return commentRepository.findByOwnerLogin(login);
};

但是如果我将模型稍微更改为按实体 id 存储所有者,则按所有者检索评论就不会那么容易了

Comment
@Id
private ObjectId _id;
private String content;
private String ownerId;

我的目的是让最终用户易于使用休息控制器,首先通过登录找到用户实体,如果存在所有用户评论

@GetMapping(params = "login")
@ResponseBody
public Flux<Comment> getAllCommentsByLogin(@RequestParam("login") String login) {
    return commentRepository.findByOwnerId(userRepository.findByLogin(login).map(user2 -> user2.getId())
};

这个解决方案显然是错误的,但我不知道是整个方法都错了还是只有这个方法错了。

希望你的userRepository.findByLogin()returnsMono<User>,那么代码应该是这样的:

return userRepository.findByLogin(login)
               .flatMapMany(user -> commentRepository.findByOwnerId(user.getId()));