我是反应式编程概念的新手。我正在遵循“学习Spring Boot 2.0”,并且所描述的简单概念/示例是可以理解的。但是我不知道如何在更复杂的用例中使用Mono / Flux。带有弹簧靴,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;
我的意图是使Rest Controller易于最终用户使用,并首先通过登录找到用户实体,如果存在,则所有用户评论
@GetMapping(params = "login")
@ResponseBody
public Flux<Comment> getAllCommentsByLogin(@RequestParam("login") String login) {
return commentRepository.findByOwnerId(userRepository.findByLogin(login).map(user2 -> user2.getId())
};
这种解决方案显然是错误的,但是我不知道整个方法是错误的还是仅此方法。
希望您的userRepository.findByLogin()
回报Mono<User>
,然后代码应如下所示:
return userRepository.findByLogin(login)
.flatMapMany(user -> commentRepository.findByOwnerId(user.getId()));
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句