将文档对象转换为 DTO spring 反应式
Convert document objects to DTO spring reactive
我正在尝试将 ReactiveCrudRepository 检索的文档对象作为 Flux<Client>
转换为 Flux<ClientDto>
现在我想出了一个方法来做到这一点,我不确定这是否阻塞:
public Mono<ServerResponse> findAll(final ServerRequest serverRequest) {
final Flux<ClientDto> map = clientService.findAll().map(client -> modelMapper.map(client, ClientDto.class)) /*.delayElements(Duration.ofSeconds(10))*/;
return ServerResponse.ok()
.contentType(MediaType.TEXT_EVENT_STREAM)
.body(map, ClientDto.class);
}
我试过添加注释的 delayElements 方法,它似乎是一个一个地发送它们,所以是非阻塞的。
我认为这更像是一个嵌套问题,但核心是我想知道如何确定我是否进行了阻塞操作。
提前致谢!
如果您显式调用 block 方法,或者如果您使用标准 jdbc 连接器连接到数据库,而不是像 Spring Data 提供的 reactiveMongo 这样的反应式连接器,则您正在阻塞。
在您发布的 snnipet 中,没有任何阻塞,但要完全确定您应该查看 clientService class 的代码及其嵌套调用(例如对存储库的调用)
我正在尝试将 ReactiveCrudRepository 检索的文档对象作为 Flux<Client>
转换为 Flux<ClientDto>
现在我想出了一个方法来做到这一点,我不确定这是否阻塞:
public Mono<ServerResponse> findAll(final ServerRequest serverRequest) {
final Flux<ClientDto> map = clientService.findAll().map(client -> modelMapper.map(client, ClientDto.class)) /*.delayElements(Duration.ofSeconds(10))*/;
return ServerResponse.ok()
.contentType(MediaType.TEXT_EVENT_STREAM)
.body(map, ClientDto.class);
}
我试过添加注释的 delayElements 方法,它似乎是一个一个地发送它们,所以是非阻塞的。
我认为这更像是一个嵌套问题,但核心是我想知道如何确定我是否进行了阻塞操作。
提前致谢!
如果您显式调用 block 方法,或者如果您使用标准 jdbc 连接器连接到数据库,而不是像 Spring Data 提供的 reactiveMongo 这样的反应式连接器,则您正在阻塞。 在您发布的 snnipet 中,没有任何阻塞,但要完全确定您应该查看 clientService class 的代码及其嵌套调用(例如对存储库的调用)