@PatchMapping的使用场景

3

有一个名为PATCH请求方法

要使用此方法,我们可以为REST端点定义 @PatchMapping 。 据我理解,这听起来像是部分更新数据库对象。

通常,我们使用POST或PUT调用执行保存或更新操作。那么,PatchMapping的确切用例是什么,为什么不能只使用PUT而不使用PATCH呢?


Patch 表示更新数据的一部分。因此,如果您有一个复杂的数据对象,但只想更新其中的一部分(例如某些字段),并且不想发送整个对象,则可以使用 Patch 来表示这是部分更新。 - zlaval
1
这将在仓库级别如何处理?我们必须saveOrUpdate整个对象!如果您提供一个详细的示例,那就太好了。 - Devkinandan Chauhan
1
我找到了一个例子: https://www.baeldung.com/http-put-patch-difference-spring 但如果您不满意,请告诉我。 - zlaval
还是有点困惑!它在仓库层面上如何运作? - Devkinandan Chauhan
1
你可以将字段设置到实体中,或者更简单的方法是使用SQL/JPQL语句,并从发布的数据中填充字段(其中包含键值对,其中键等于数据库字段名称)。你也可以创建一个部分对象,在服务层将其映射到实体中(但在Java中需要编写大量代码)。有很多种方法。 - zlaval
2
如果能有一个包含REST端点、服务和存储库代码的示例,那将非常棒! - Devkinandan Chauhan
1个回答

4
仍不清楚PatchMapping的确切用例,为什么不能只使用PUT而不是PATCH?
PUT(由RFC 7231定义)和PATCH(由RFC 5789定义)是用于类似目的的两种不同方法:请求服务器使其表示与客户端上的表示匹配。
想象一下,如果您尝试更新由服务器提供的网页。 客户端首先获取服务器表示的最新副本:
GET /foo

然后,使用客户喜欢的本地HTML编辑器对此私有副本进行更改。当客户完成更改后,我们希望将这些更改发送回服务器以供使用。
在HTTP中,直接的方法是将整个更新后的表示发送回服务器:
PUT /foo

<html>....</html>

当表示非常大(与HTTP头相比),而编辑非常小(与文档相比)时,使用PUT成为实现本应是小事的一种“昂贵”方式。
为此,我们还可以支持PATCH,这样我们就不必发送整个文档,而只需发送我们所做更改的表示:一个修补程序文档。
当服务器接收到我们的补丁时,它会加载自己的文档副本,应用补丁文档描述的更改,并保存结果。
因此:总体用例相同:远程创作。您将资源的表示加载到您的HTTP感知文档编辑器中,进行一些更改,然后点击“保存”,您的编辑器知道如何将您的编辑内容传达回服务器。

1
谢谢您的回答,现在我对使用情况有了一些清晰的认识。如果能提供一个具有REST端点、服务和存储库代码的示例,那就太好了! - Devkinandan Chauhan

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接