问题标签 [rfc6902]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
3 回答
1807 浏览

json - How is the tilde escaping in the JSON Patch RFC supposed to operate?

Referencing https://www.rfc-editor.org/rfc/rfc6902#appendix-A.14:

A.14. ~ Escape Ordering

An example target JSON document:

A JSON Patch document:

The resulting JSON document:

I'm writing an implementation of this RFC, and I'm stuck on this. What is this trying to achieve, and how is it supposed to work?

Assuming the answer to the first part is "Allowing json key names containing /s to be referenced," how would you do that?

0 投票
1 回答
8726 浏览

java - 如何将 JSON Patch 与 Spring Data REST 一起使用?

根据Sprind Data Rest Docs它支持媒体类型application/patch+json。也许这个假设是错误的,但我认为这意味着 Spring Data Rest 支持JSON Patch (RFC 6902)。你如何让它工作?

这是我尝试过的:

将这些依赖项添加到我的build.gradle

使用以下代码:

在运行上述内容后显示它正在工作:

当我尝试这个调用时,我认为它符合JSON Patch

我收到此错误:

日志显示:

0 投票
1 回答
116 浏览

database - HTTP PATCH 连接表?

RFC 6902明确地定义了很多东西。除了两个相关的事情:

  1. 如何修补连接到资源的表?
  2. 当连接有多行时?

例如。

结果来自这些数据库表和列:

所以,如果我发送一个补丁:

这非常简单。但是当我想更新同一资源的类别时呢?IE。“加入”表。

另外,请注意两件事:

  • 不包括任何现有值。
  • 金额小于原始值(2 个值而不是 3 个)

假设补丁之前的原始值在newscategories_mapping.id20、21 和 22 中。

问题1:/categories值是否应该4替换id=20,值5替换id=21?还是应该删除 id=20, id=21 和 id=22 并且新值得到新的 ID id=23 和 id=24?

问题 2:即使没有明确要求,是否应该删除 id=22 ?

问题 3:或者根本不应该执行上述操作,而是应该有一个单独的端点来修补每个类别?所以,例如。PATCH /news/123/categories/20PATCH /news/123/categories/21

0 投票
2 回答
1111 浏览

java - Java Spring Patch RFC-6902 即时类型转换异常

我有与将字符串值转换为相应类型有关的修补问题。当我尝试修补“区域设置”类型(或原语)时,它可以工作。但即时失败

实体:

补丁方法:

pom.xml

数据:

例外:

更深层次的例外:

编辑1:

以下代码块起作用:

代码:System.out.println(mapper.readValue("1517846620.12312312", Instant.class)); 结果:2018-02-05T16:03:40.123123120Z

以下代码块不起作用:

修补:[{"op": "replace", "path": "dateOfBirth", "value": "1517846620.12312312"}]

解决方案:

尽管@Babl 的答案可能会奏效,但我想出了以下几点。

  1. 正如@Babl 指出的那样,Spring 框架修补不是 FasterXML 而是由 Spring Expression Context 完成的,因此所有 Jackson 注释都不会生效。

  2. 我正在直接修补User实体,这是非常糟糕的做法。

所以我最终得到了以下实现

补丁库

补丁方法

!注意:该applyPatchOnObject方法只接受扩展类,扩展EmbeddedResourceResourceSupport。所以基本上只有 DTO。

实体是一样的

使用所有正确的注释引入 UserDTO Jackson

在我用值修补了我的 DTO 之后。我将使用 ObjectMapper 或一些自定义方式将更改从 DTO 应用到实体。

欢迎所有建议和意见。

0 投票
2 回答
771 浏览

rest - 如何使用 JSON Patch 增加价值?

我们需要通过 REST API 更新计数器,并且我们使用 JSON Patch 进行 PATCH 调用,所以它应该是这样的:

{"op":"increment", "path":"/counter", "value": 1 }

问题是 JSON Patch 不支持这种类型的操作。ADD 操作应该只适用于数组,因此最接近的解决方案是使用 REPLACE 操作来替换计数器值,但是如果多个客户端同时尝试更新计数器,则可能会导致问题。

那么我们应该如何解决这个问题,添加一个像 increment 这样的自定义操作会有多大的错误呢?

0 投票
0 回答
17 浏览

http - 如何使用 json 补丁替换列表

我正在尝试遵循此文档 https://datatracker.ietf.org/doc/html/rfc6902

使用 json 补丁替换列表的正确方法是什么?

认为

颜色在java代码中定义为private List<String> colors

我想使用 HTTP Patch 方法替换颜色。我尝试了以下。

发送此正文会导致后端抛出错误。如果我对一个字符串而不是一个List<>有效的替换。