【问题标题】:Updating Mono object by another Mono object用另一个 Mono 对象更新 Mono 对象
【发布时间】:2021-01-16 23:40:54
【问题描述】:

亲爱的, 我坚持实现一个函数(它基本上是一个更新操作),它能够将 Mono 作为参数并返回 Mono 的更新版本,其中:

  • 返回的实例派生自数据库查询;
  • Mono 的更新版本包含 Mono 选择的字段。

这是示例代码(直接提供对象,不使用 Mono 实例:

public Mono<CompanyDto> updateById(String id, CompanyDto companyDtoMono) {
    return getCompanyById(id).map(companyEntity -> {
        companyEntity.setDescription(companyDtoMono.getDescription());
        companyEntity.setName(companyDtoMono.getName());
        return companyEntity;
    }).flatMap(companyEntity2 -> reactiveNeo4JTemplate.save(companyEntity2)).map(companyEntity -> companyMapper.toDto(companyEntity));

}`

问题是:如果函数签名是,我该如何更改代码

public Mono<CompanyDto> updateById(String id, Mono<CompanyDto> companyDtoMono)

PS:

getCompanyById(id)

返回一个

Mono<CompanyEntity>

谢谢, 最好的

FB

【问题讨论】:

    标签: spring spring-webflux reactive spring-mono


    【解决方案1】:

    这个问题有很多解决方案,但其中之一是使用 Zip

        public Mono<CompanyDto>  updateById(String id, Mono<CompanyDto> companyDtoMono){
     return    Mono.zip(getCompanyById(id),companyDtoMono,(companyEntity, companyDto) -> {
            companyEntity.setDescription(companyDto.getDescription());
            companyEntity.setName(companyDto.getName());
            return companyEntity;
        })
             .flatMap(companyEntity2 -> reactiveNeo4JTemplate.save(companyEntity2))
             .map(companyEntity -> companyMapper.toDto(companyEntity));
    }
    

    【讨论】:

    • 哦!有那么明显:) 其他解决方案呢?
    • 您可以使用 flatmap 并在 flatmap 内部继续使用其他流,例如 getCompanyById(id).flatmap(e-> companyDtoMono.map(m->{ 这里编辑数据并返回结果}
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-10
    • 2020-11-20
    • 2022-10-24
    • 2019-12-14
    • 2018-12-07
    相关资源
    最近更新 更多