Передать значение из Mono / Flux в методы - PullRequest
0 голосов
/ 18 декабря 2018

Я новичок в концепции реактивного программирования.Я слежу за «Learning Spring Boot 2.0», и описанные простые концепции / примеры понятны.Но я не понимаю, как использовать Mono / Flux в более сложных случаях.Некоторые примеры с пружинной загрузкой, монго и проектным реактором

Моя модель

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);
};

Но еслиЯ бы немного изменил модель, чтобы хранить владельца по идентификатору сущности, было бы не так легко получить комментарии от владельца

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())
};

это решение очевидно неверно, но я не знаю, является ли весь подход неправильным или только этот метод.

1 Ответ

0 голосов
/ 18 декабря 2018

Будем надеяться, что ваш userRepository.findByLogin() вернет Mono<User>, тогда код должен быть таким:

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