You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 06:36:05