Spring Boot REST - 如何在多对多关系中开机自检/打补丁



我在 REST API 中添加多对多关系时遇到问题。

假设我们有两个具有多对多关系的实体 - 员工和任务(员工有Set<Task>,任务有Set<Employee>(。

某些特定任务可通过此端点访问:

http://localhost:8080/api/tasks/2

分配给 ID 为 88 的员工的任务可通过以下方式访问:

http://localhost:8080/api/employees/88/tasks

目标是将此链接提交/修补到端点。

你能给我一个提示,这个端点在控制器中应该是什么样子的吗?我尝试了这样的东西,但它不起作用。

@PatchMapping("/{employeeId}/tasks")
public Task addTask(@RequestBody Task task, @PathVariable Long taskId) { ... }

第二个问题- 我会链接使用邮递员。你能告诉我我应该选择哪种内容类型吗?这个链接应该如何格式化?

期待您的回答!

编辑

我是否必须添加另一个需要 uri 的构造器?

根据定义,PATCH 方法对给定资源应用部分更新,而 PUT 方法用于完全替换给定资源。这里的关键词是 PATCH 和 PUT 都特定于给定资源。 POST 方法用于创建新资源。

因此,如果您只想更新资源中的几个字段,并且不需要完全更新它,请使用 PATCH 方法而不是 PUT 方法是有意义的。

PATCH 请求正文通过一系列操作描述如何更新资源。可用于描述这些操作的一种格式是 JSON 修补程序。

由于 PATCH 操作特定于给定资源,并且使用 json-patch 库,因此您的控制器方法应如下所示:

@PatchMapping("/{employeeId}/tasks/{taskId}")
public Task updateTask(@RequestBody JsonPatch taskPatch, @PathVariable Long employeeId, @PathVariable Long taskId) { ... }

请注意,这与POST不同,使用不同的方法(updateTask(。例如,如果要从任务资源(由 taskId 提供(更新一个字段,则从客户端(可以是 Postman(在请求正文中发送的 jsonPatch 将类似于

[{
"op":"replace",
"path":"/field",
"value":"newValue"
}]

有不同的操作,例如添加、删除、替换、复制和测试。

现在,在代码中,您需要将此修补程序应用于现有资源。此参考说明如何执行此操作:

https://www.baeldung.com/spring-rest-json-patch

我希望这有所帮助。

相关内容

  • 没有找到相关文章

最新更新