Quarkus Mutiny中Java Streams peek()的等效调试方法是什么?
在Quarkus Uni流中实现类似Java Streams peek的调试方法
在Mutiny(Quarkus响应式API依赖的框架)里,你可以用invoke()方法实现Java Streams中peek()的功能——它能在不修改流中值的前提下,执行打印这类副作用操作,完美适配你的调试需求。
修改后的代码示例:
public Uni<TenantDraft> getTenantById(@PathParam("tenantKey") String tenantKey) { return tenantService.findByTenantKey(tenantKey) // 打印查询返回的Tenant对象 .invoke(tenant -> System.out.println("查询到的Tenant: " + tenant)) .onItem().ifNotNull().transform(TenantMapper.INSTANCE::tenantToTenantDraft) // 打印转换后的TenantDraft对象 .invoke(draft -> System.out.println("转换后的TenantDraft: " + draft)) .onItem().ifNull().failWith(ForbiddenException::new); }
关键说明:
invoke()接收消费者函数,仅执行副作用操作,不会改变流中传递的对象,完全契合调试时查看值的场景。- 若需要调试异常情况,可结合
onFailure().invoke()打印异常信息,比如:.onFailure().invoke(throwable -> System.err.println("出现异常: " + throwable.getMessage())) - 避免使用
await().indefinitely(),它会阻塞响应式流的异步执行逻辑,容易引发线程异常,而invoke()是异步执行的,不会破坏响应式模型。
内容的提问来源于stack exchange,提问作者Jude Niroshan
相关产品推荐
相关产品推荐

