首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何返回Uni<Object>或Uni<Void>?

如何返回Uni<Object>或Uni<Void>?
EN

Stack Overflow用户
提问于 2021-04-28 03:05:49
回答 1查看 194关注 0票数 0
代码语言:javascript
复制
@Route(...)
public Uni<?> call() {
    return Uni.createFrom().voidItem();
}

引发Uni:null返回的NullPointerException: Invalid值

然而,

代码语言:javascript
复制
@Route(...)
public Uni<Void> call() {
    return Uni.createFrom().voidItem();
}

工作正常,并使用HTTP 204进行响应

如何从相同的方法获取Uni或Uni?我只需要在特定情况下返回http 204

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-04-28 14:47:35

您不能直接这样做,因为类型不同。我建议使用RESTEasy Reactive,并执行以下操作:

代码语言:javascript
复制
@GET
public Uni<Response> call() {
   Uni<AnyObject> uni = .... ;
   return uni
      .onItem().transform(res -> {
        if (res == null) return Response.noContent().build();
        return Response.ok(res).build();
    });
}

通过发出Response对象,您可以自定义响应状态。

如果您想继续使用反应式路由,另一个解决方案是不返回Uni,而是获取RoutingContext作为参数:

代码语言:javascript
复制
@Route(...)
public void call(RoutingContext rc) {
   HttpServerResponse response = rc.response();
   Uni<AnyObject> uni = .... ;
   return uni
      .subscribe().with(res -> {
        if (res == null) response.setStatus(204).end();
        else response.setStatus(200).end(res);
    }, failure -> rc.fail(failure)); // will produce a 500.
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67289228

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档