Spring / Reactor:检索和修改Mono

时间:2019-07-16 22:15:36

标签: spring spring-boot project-reactor

我有以下模型:

class Person {
    List<Address> addresses;
}

我使用ReactiveMongoRepository来检索Mono。

public interface PersonRepository extends ReactiveMongoRepository<Person, String>{
}

但是我找不到将地址添加到此人地址的方法  并返回给定地址的单声道。 这是我想要实现的目标的签名:

Mono<Address> addAddress(Address address)

这是我以前没有Reactor时使用的代码:

public Mono<Addresses> addAddress(Address address){
    Mono<Person> person = personRepository.findById(personId);
    // person.getAddresses().add(address) ?
    // personRepository.save(person) ?
    // return "address" as Mono
}

问题:如何将地址添加到Mono<Person>,然后返回该地址的单声道?

1 个答案:

答案 0 :(得分:1)

这应该可以解决问题:

public Mono<Addresses> addAddress(Address address){
        return personRepository.findById(personId)
                .doOnNext(p -> p.getAddresses().add(address))
                .flatMap(personRepository::save)
                .then(Mono.just(address));
}

then()等待存储库保存数据,完成后返回地址。

另一种方法是从存储库返回的人员中提取(map)地址(如果在保存过程中修改了地址,则可能是更好的解决方案)

public Mono<Addresses> addAddress(Address address){
        return personRepository.findById(personId)
                .doOnNext(p -> p.getAddresses().add(address))
                .flatMap(personRepository::save)
                .map(savedPerson -> savedPerson.getAddressess().findThisParticularJustSavedOne());
}