使用 Vert.x 的 JAXRS 服务
JAXRS Service using Vert.x
我在应用程序服务器中实现 JAX-RS 服务,使用 Vert.x 结合 Vert.x Pg 池存储数据。存储数据非常简单,因为 return 对客户端没有任何影响。然而,当涉及到 HTTP GET 请求时,它变得更加复杂。
例如:
public List<Data> findAll() {
List<Data> list = new ArrayList<>();
pool.query("SELECT * FROM DATA", ar -> {
if (ar.succeeded()) {
RowSet rows = ar.result();
for (Row row : rows) {
list.add(new Data(row.getString(0), row.getString(1)));
}
} else {
System.out.println("Failure: " + ar.cause().getMessage());
}
});
return list;
}
因此,如您所见,作为 "ar" 一个 io.vertx.core.AsyncResult 它立即 returns,带有一个空的 ArrayList。
我知道我应该 return 一个 AsyncResult 或其子类,只是我不知道当查询完成时客户端如何获取对象列表。
有什么想法/例子吗?
谢谢!
要使用 Reactive Pg Client 创建 JAX-RS 应用程序,我建议使用 Quarkus。
您将获得由 Quarkus 提供的 PgPool
,它使用 JDK CompletionStage
具有特殊的 API。然后在 Quarkus 中你的 JAX-RS 方法可能 return a CompletionStage
.
您的方法如下所示:
public CompletionStage<List<Data>> findAll() {
pool.query("SELECT * FROM DATA")
.thenApply(rows -> {
List<Data> list = new ArrayList<>();
for (Row row : rows) {
list.add(new Data(row.getString(0), row.getString(1)));
}
return list;
});
}
免责声明:我在 Red Hat 工作,我是 Vert.x 核心团队成员和 Quarkus 贡献者。
我在应用程序服务器中实现 JAX-RS 服务,使用 Vert.x 结合 Vert.x Pg 池存储数据。存储数据非常简单,因为 return 对客户端没有任何影响。然而,当涉及到 HTTP GET 请求时,它变得更加复杂。
例如:
public List<Data> findAll() {
List<Data> list = new ArrayList<>();
pool.query("SELECT * FROM DATA", ar -> {
if (ar.succeeded()) {
RowSet rows = ar.result();
for (Row row : rows) {
list.add(new Data(row.getString(0), row.getString(1)));
}
} else {
System.out.println("Failure: " + ar.cause().getMessage());
}
});
return list;
}
因此,如您所见,作为 "ar" 一个 io.vertx.core.AsyncResult 它立即 returns,带有一个空的 ArrayList。 我知道我应该 return 一个 AsyncResult 或其子类,只是我不知道当查询完成时客户端如何获取对象列表。 有什么想法/例子吗? 谢谢!
要使用 Reactive Pg Client 创建 JAX-RS 应用程序,我建议使用 Quarkus。
您将获得由 Quarkus 提供的 PgPool
,它使用 JDK CompletionStage
具有特殊的 API。然后在 Quarkus 中你的 JAX-RS 方法可能 return a CompletionStage
.
您的方法如下所示:
public CompletionStage<List<Data>> findAll() {
pool.query("SELECT * FROM DATA")
.thenApply(rows -> {
List<Data> list = new ArrayList<>();
for (Row row : rows) {
list.add(new Data(row.getString(0), row.getString(1)));
}
return list;
});
}
免责声明:我在 Red Hat 工作,我是 Vert.x 核心团队成员和 Quarkus 贡献者。