Quarkus Reactive Mutiny接口返回Uni引用而非字符串值问题求助
问题原因
当前项目引入的是阻塞式quarkus-resteasy组件,该组件原生不支持Mutiny响应式类型Uni的自动解析,会直接将Uni实例的toString()结果作为响应返回,因此你拿到的是Uni对象的引用字符串,而非其包裹的实际业务值。
解决方案
方案一(推荐):替换为响应式REST组件
Quarkus官方主推的quarkus-resteasy-reactive组件原生支持Mutiny的Uni/Multi类型自动解析,无需修改业务接口代码即可正常返回结果,只需调整pom.xml依赖:
- 删除原有两个阻塞式REST相关依赖:
<!-- 移除以下两个依赖 --> <dependency> <groupId>io.quarkus</groupId> <artifactId>quarkus-resteasy-jackson</artifactId> </dependency> <dependency> <groupId>io.quarkus</groupId> <artifactId>quarkus-resteasy</artifactId> </dependency>
- 新增响应式REST相关依赖:
<dependency> <groupId>io.quarkus</groupId> <artifactId>quarkus-resteasy-reactive</artifactId> </dependency> <dependency> <groupId>io.quarkus</groupId> <artifactId>quarkus-resteasy-reactive-jackson</artifactId> </dependency>
- 重启项目后调用接口即可正常返回
item1字符串。
方案二(不推荐):阻塞获取Uni值
如果项目必须保留阻塞式quarkus-resteasy,可以手动阻塞等待Uni执行完成并获取结果,该方案会丢失响应式编程的非阻塞优势:
@GET @Produces(MediaType.TEXT_PLAIN) public String hello() { return Uni.createFrom().item("item1") .await().indefinitely(); }
内容的提问来源于stack exchange,提问作者Jordi
相关产品推荐
相关产品推荐

