问题描述
@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.
}