如何 return Uni<Object> 或 Uni<Void>?
How to return either Uni<Object> or Uni<Void>?
@Route(...)
public Uni<?> call() {
return Uni.createFrom().voidItem();
}
抛出 NullPointerException:无效值 return 由 Uni 编辑:null
然而
@Route(...)
public Uni<Void> call() {
return Uni.createFrom().voidItem();
}
工作完美并以 HTTP 204 响应
我如何设法从同一方法获取 Uni 或 Uni?
我需要 return http 204 仅在特定情况下
你不能直接这样做,因为类型不同。
我建议使用 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
对象,您可以自定义响应状态。
如果您想继续使用 Reactive Routes,另一种解决方案是不 return 一个 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.
}
@Route(...)
public Uni<?> call() {
return Uni.createFrom().voidItem();
}
抛出 NullPointerException:无效值 return 由 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
对象,您可以自定义响应状态。
如果您想继续使用 Reactive Routes,另一种解决方案是不 return 一个 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.
}