当我在处理 QUArkus 应用程序时,我试图返回 Uni,但它给了我错误:
@GET
@javax.ws.rs.Path("/notification/typeCount")
@Produces({MediaType.APPLICATION_JSON, MediaType.TEXT_PLAIN})
public Uni<Response> getNoti(){
return Uni.createFrom().item(getAllCount()).onItem().transform(f -> f != null ? Response.ok(f) : Response.ok(null))
.onItem().transform(ResponseBuilder::build);
}
public Uni<Object> getAllCount() {
try{
sql="my query";
return client.query(sql).execute().onItem().transform(pgRowSet -> {
Map<String, Object> l = CUtils.mapLogic(pgRowSet);
return l;
});
}
catch(Exception e){
return null;
}
}
但是从前端调用这个请求时,它给了我以下错误:
RESTEASY002020:未处理的异步异常,发回 500:com.fasterxml.jackson.databind.exc.InvalidDefinitionException:找不到类 io.smallrye.mutiny.context.ContextPropagationUniInterceptor$2 的序列化程序,也没有发现用于创建 BeanSerializer 的属性(为避免异常,请禁用SerializationFeature.FAIL_ON_EMPTY_BEANS)
请让我知道如何解决它。
我找到了一种方法,但如果我更改以下行,我认为它不合适:
从:
return Uni.createFrom().item(getAllCount()).onItem().transform(f -> f != null ? Response.ok(f) : Response.ok(null))
.onItem().transform(ResponseBuilder::build);
至:
return Uni.createFrom().item(getAllCount()).onItem().transform(f -> f != null ? Response.ok(f.await().indefinitely()) : Response.ok(null))
.onItem().transform(ResponseBuilder::build);
比它会起作用。所以如果我添加“f.await().infinitely()”它会起作用,我的问题是它仍然是被动的吗?