Quarkus Mutiny集成Neo4j时类型不匹配编译问题如何解决
报错原因
- 第一个类型不匹配:你声明的
hello()方法返回类型为Uni<String>,但当前代码通过Multi.createFrom().resource()构造的是Multi<String>类型的流,对应多条Fruit查询结果,和方法声明的返回类型不符。 - 第二个类型不匹配:
withFinalizer要求传入的函数返回Uni<Void>类型,你使用Multi.createFrom().publisher(session.close())生成的是Multi类型,不符合参数要求。
解决方法
方案1:返回所有水果名拼接的单个字符串(符合原方法返回Uni<String>的声明)
@Path("/hello") @AllArgsConstructor public class GreetingResource { private final Driver driver; @GET @Produces(MediaType.TEXT_PLAIN) public Uni<String> hello() { return Multi.createFrom().resource( driver::rxSession, session -> session.readTransaction(tx -> { RxResult result = tx.run("MATCH (f:Fruit) RETURN f.name as name ORDER BY f.name"); return Multi.createFrom().publisher(result.records()).map(record -> record.get("name").asString()); }) ) // 将多元素的Multi<String>拼接为单个字符串,转换为Uni类型 .collect().join(", ") // 调整finalizer返回Uni<Void>,匹配参数要求 .withFinalizer(session -> Uni.createFrom().publisher(session.close())); } }
方案2:直接返回所有水果名序列,修改方法返回类型为Multi<String>
@Path("/hello") @AllArgsConstructor public class GreetingResource { private final Driver driver; @GET @Produces(MediaType.TEXT_PLAIN) public Multi<String> hello() { return Multi.createFrom().resource( driver::rxSession, session -> session.readTransaction(tx -> { RxResult result = tx.run("MATCH (f:Fruit) RETURN f.name as name ORDER BY f.name"); return Multi.createFrom().publisher(result.records()).map(record -> record.get("name").asString()); }) ).withFinalizer(session -> Uni.createFrom().publisher(session.close())); } }
内容的提问来源于stack exchange,提问作者Jordi
相关产品推荐
相关产品推荐

