Spring webflux与Mono对象交互

时间:2017-11-16 20:52:04

标签: spring reactive-programming spring-webflux

我有一个简单的CRUD控制器。更新时我希望将更新的模型与必须更新的模型合并,这就是我现在所拥有的:

@PutMapping("{id}")
public Mono<Map> update(@PathVariable UUID id, @RequestBody Server updatedServer) {
    Mono<Server> server = this.serverRepository.findById(id);

    // Update the server here.
    // server.setName(updatedServer.getName());
    // server.setHost(updatedServer.getHost());

    server.flatMap(this.serverRepository::save).subscribe();

    return Mono.just(Collections.singletonMap("success", true));
}

如何在保存之前编辑server变量?订阅Mono时,它将在保存后执行。

我知道这是一个非常简单的问题,但我找不到办法。

1 个答案:

答案 0 :(得分:1)

我总是在提出问题之后找到答案...... 我刚用另一个flatmap来编辑对象:

@PutMapping("{id}")
public Mono<Server> update(@PathVariable UUID id, @RequestBody Server updatedServer) {
    Mono<Server> server = this.serverRepository.findById(id);

    return server.flatMap(value -> {
        value.setName(updatedServer.getName());
        value.setHost(updatedServer.getHost());
        return Mono.just(value); // Can this be done cleaner?
    }).flatMap(this.serverRepository::save);
}

或仍然返回success: true时:

@PutMapping("{id}")
public Mono<Map> update(@PathVariable UUID id, @RequestBody Server updatedServer) {
    Mono<Server> server = this.serverRepository.findById(id);

    return server.flatMap(value -> {
        value.setName(updatedServer.getName());
        value.setHost(updatedServer.getHost());
        return Mono.just(value); // Can this be done cleaner?
    }).flatMap(this.serverRepository::save).subscribe();

    return Mono.just(Collections.singletonMap("success", true));
}