我是个响应式编程的新手。我正在学习“学习Spring Boot2.0”,所描述的简单概念/示例是可以理解的。但我不知道如何在更复杂的用例中使用Mono/Flux。使用spring boot、mongo和project reactor一些示例
我的模型
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;
我的目的是让rest控制器易于最终用户使用,并首先通过登录找到用户实体,如果存在所有用户注释
@GetMapping(params = "login")
@ResponseBody
public Flux<Comment> getAllCommentsByLogin(@RequestParam("login") String login) {
return commentRepository.findByOwnerId(userRepository.findByLogin(login).map(user2 -> user2.getId())
};
这种解决方案显然是错误的,但我不知道是整个方法是错误的,还是只有这种方法是错误的。
发布于 2018-12-18 20:14:31
让我们希望你的userRepository.findByLogin()
返回Mono<User>
,那么代码应该是这样的:
return userRepository.findByLogin(login)
.flatMapMany(user -> commentRepository.findByOwnerId(user.getId()));
https://stackoverflow.com/questions/53835201
复制