如何解决如何返回 Uni<Object> 或 Uni<Void>?
@Route(...)
public Uni<?> call() {
return Uni.createFrom().voidItem();
}
抛出一个 NullPointerException:Uni 返回的值无效:null
不过
@Route(...)
public Uni<Void> call() {
return Uni.createFrom().voidItem();
}
工作正常并以 HTTP 204 响应
我如何通过相同的方法获得 Uni
解决方法
您不能直接这样做,因为类型不同。 我建议使用 RESTEasy Reactive 并执行以下操作:
@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
作为参数:
@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.
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。