首页 > 解决方案 > @PatchMapping 的用例

问题描述

有一个名为PATCH的RequestMethod

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

通常,我们使用 POST 或 PUT 调用来执行保存或更新。所以,仍然不清楚 PatchMapping 的确切用例是什么,为什么我不能只使用 PUT 而不是 PATCH?

标签: javaspringhibernateresthttp

解决方案


仍然不清楚 PatchMapping 的确切用例是什么,为什么我不能只使用 PUT 而不是 PATCH?

PUT(由RFC 7231定义)和 PATCH(由RFC 5789定义)是用于类似目的的两种不同方法:请求服务器使其资源表示与客户端上的表示匹配。

想象一下,如果您愿意,尝试更新服务器提供的网页。客户端首先获取服务器表示的最新副本:

GET /foo

然后,使用客户最喜欢的本地 HTML 编辑器,对这个私有副本进行更改。当客户端完成更改后,我们希望将这些更改发送回服务器以供使用。

在 HTTP 中执行此操作的直接方法是简单地将整个更新的表示发送回服务器:

PUT /foo

<html>....</html>

当表示非常大(与 HTTP 标头相比)并且编辑非常小(与文档相比)时,PUT 就变成了一种有点“昂贵”的方式来实现应该是一件小事。

为此,我们可能还支持 PATCH,这样我们就不需要发送整个文档,而是发送我们所做更改的表示:一个补丁文档。

当服务器收到我们的补丁时,它会加载它自己的文档副本,应用补丁文档描述的更改,并保存结果。

因此:总体用例是相同的:远程创作。您将资源的表示加载到支持 HTTP 的文档编辑器中,进行一些更改,然后点击“保存”,您的编辑器就知道如何将您的编辑反馈回服务器。


推荐阅读