将 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()));
我是响应式编程概念的新手。我正在关注 "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()));