Logo
Section 1 / 10

创建 REST 端点

学习如何使用 Quarkus 创建端点。

导入

创建 REST 端点

学习如何使用 Quarkus 创建端点。

默认端点

当我们创建一个新的 Quarkus 应用时,会自动生成一个名为 GreetingResource 的资源。该资源在 /hello 路径上暴露一个端点,返回一条问候消息。

我们首先使用开发者工具命令来生成一个新的 Quarkus 应用:

Terminal

生成的代码如下:

No configuration found for ID: 82fa303e1807af6ea3aa7f0c57142e39acccb8bb1d45e3e25b99d0f715cda5aa

生成的代码中包含一个名为 quarkus-resteasy-reactive 的依赖。RestEasy 是用于创建 REST 端点的扩展,可以通过添加 quarkus-resteasy 依赖来以响应式或传统非响应式方式使用。

创建端点

我们将从创建一个处理待办事项列表的简单资源开始。

创建模型

首先,我们创建 Todo 类,用于管理对象的不同属性,例如 status 和 message。

注意: 代码中使用的是 Todo,没有连字符。

1package io.educative; 2 3public class Todo { 4 5 public Boolean status; 6 public String message; 7 8 public Todo() { 9 } 10 11 public Todo(Boolean status, String message) { 12 this.status = status; 13 this.message = message; 14 } 15}

Todo 类非常简单。我们用它来定义属性,并通过构造函数创建新的对象。

端点实现

接下来,我们创建一个新的资源类,用于处理对指定待办事项列表的各种操作。

1package io.educative; 2 3import java.util.Collections; 4import java.util.LinkedHashMap; 5import java.util.Set; 6 7import javax.ws.rs.DELETE; 8import javax.ws.rs.GET; 9import javax.ws.rs.POST; 10import javax.ws.rs.Path; 11 12@Path("/todo") 13public class TodoResource { 14 15 private Set<Todo> todos = Collections.newSetFromMap(Collections.synchronizedMap(new LinkedHashMap<>())); 16 17 public TodoResource() { 18 todos.add(new Todo(true, "Learn Quarkus")); 19 } 20 21 @GET 22 public Set<Todo> list() { 23 return todos; 24 } 25 26 @POST 27 public Set<Todo> add(Todo todo) { 28 todos.add(todo); 29 return todos; 30 } 31 32 @DELETE 33 public Set<Todo> delete(Todo todo) { 34 todos.removeIf(existingTodo -> existingTodo.message.contentEquals(todo.message)); 35 return todos; 36 } 37}

在上述代码中,我们在 /todo 路径下创建了三个端点:

  • GET 端点:返回待办事项列表。
  • POST 端点:添加一个新的待办事项。
  • DELETE 端点:从列表中删除与指定消息相同的待办事项。

我们可以使用下方的交互式沙箱测试不同的端点。

注意: 我们添加了 quarkus-resteasy-reactive-jackson 扩展以支持 JSON 映射。

No configuration found for ID: 6c27c22b8d66ae36b9b1d12b12824dfc87e28a1e69cccf01fe8088ba41d79355

我们可以通过打开一个新的终端标签页,使用以下命令添加一个新的待办事项:

1curl --location 'localhost:3000/todo' \ 2--header 'Content-Type: application/json' \ 3--data '{ 4 "status": false, 5 "message": "test todo" 6}'

通过请求 GET 端点,可以列出所有可用的待办事项。

1curl --location 'localhost:3000/todo'

删除一个待办事项也可以通过向 DELETE 端点传递与 POST 命令相同的负载来完成。

Quarkus 基础知识

Hibernate Validator