Quarkus中如何从transformToUni获取并返回String类型EntityId
问题分析与解决方案
你的代码报错主要有两个原因:
transformToUni要求lambda返回**Uni类型**,但你的代码里只定义了entityId却没有返回任何内容;- 你试图把异步的
Uni对象直接赋值给String变量,类型完全不匹配。
针对需求,分两种场景给出解决方案:
推荐:保持响应式流程(符合Quarkus异步设计)
如果你的业务逻辑本身是异步的,应该用Uni<String>来接收结果,使用transform(而非transformToUni)做同步值转换:
// 用Uni<String>接收异步结果 Uni<String> entityIdUni = entityService.createEntry(multimaparr, resolved) .onItem().transform(createResult -> createResult.getEntityId());
后续需要使用entityId时,通过订阅触发异步执行:
entityIdUni.subscribe().with(entityId -> { // 在这里处理获取到的entityId字符串 });
特殊场景:同步获取String(不推荐生产环境)
如果必须阻塞线程获取同步结果(仅建议测试场景使用),可以用await()方法:
String entityId = entityService.createEntry(multimaparr, resolved) .onItem().transform(createResult -> createResult.getEntityId()) .await().indefinitely(); // 阻塞直到结果返回
关键区别说明
transform:用于同步转换当前item,直接返回目标类型(这里就是String);transformToUni:用于把当前item转换成另一个异步操作(返回Uni),适合需要基于当前结果发起新异步调用的场景。
内容的提问来源于stack exchange,提问作者vivek kumar
相关产品推荐
相关产品推荐

