【问题标题】:PATCH Request into Java Spring API对 Java Spring API 的 PATCH 请求
【发布时间】:2020-02-13 14:13:44
【问题描述】:

我想在 OpenShift API 中发出 PATCH 请求。 为了方便起见,我们认为我们在 OpenShift API 中看到了这一点:

内容可以是这样的:

{ 
  "limits":{ 
    "cpu":"10m"
  },
  "requests":{ 
    "memory":"1G"
  }
}

或者这个:

{ 
  "limits":{ 
    "cpu":"30m",
    "memory":"2G"
  },
  "requests":{ 
    "memory":"5G"
  }
}

或者...,你明白我的意思;) Json 中的键可以是也可以不是。

所以现在,我想知道如何制作补丁,而不必知道过去是什么,因为代码只会接收新值,无论是否为空。

我希望清楚:) 我在 Maven 中使用 JDK 13 和 Spring

谢谢

【问题讨论】:

  • 我认为这与春天没有任何关系。这取决于您使用什么来跟踪相关资源。如果您使用的是数据库,则可以读出旧版本,更新给定 JSON 中包含的字段,然后将其提交回来。如果您使用的是Map,则在从中检索旧实例后执行相同操作。等等。
  • 我不知道以前有什么,我只有新的值到 json 中
  • 对,但是你想用这些值做什么......大概用它们更新一些现有资源,在这种情况下我的上述答案仍然有效。
  • 我知道我会怎么做,我会让一个新的 http 进入 api 以了解那里有什么,然后我将能够识别什么是新的 :)
  • 我从未尝试过,但我认为最新版本的 Openshift API 支持 json-patch,因此您可能甚至不需要知道现有参数,只需发送新参数 { "op": "替换", ... },

标签: java json openshift http-patch


【解决方案1】:

答案:通过对包含旧日期的 API 创建一个 get 方法来获取旧数据。 然后,我将能够知道补丁的变化! :)

【讨论】:

    【解决方案2】:

    最合适的解决方案似乎是将您的请求作为 json-patch 请求。格式化文档:http://jsonpatch.com/

    在我的示例中,我正在更新我的 DeploymentConfig 的“图像”属性,但这应该适用于其他类型的对象。请注意,您可以为每个请求创建多个补丁命令,并且每个补丁命令只需要了解构成您正在更改的路径的属性。

    我的请求设置:configurations docs

    • 请求:PATCH /apis/apps.openshift.io/v1/namespaces/$NAMESPACE/deploymentconfigs/$NAME
    • 身份验证:不记名 $TOKEN
    • 标题:

      • 内容类型:application/json-patch+json
      • 接受:应用程序/json
      • 连接:关闭
    • 正文:

    [
        {
            "op": "replace", 
            "path": "/spec/template/spec/containers/0/image", 
            "value": "my-repo-image.url/my-image:v10"
        },
        { "op": "add", ... },
        { "op": "remove", ...},
        ...
    ]
    

    【讨论】:

      猜你喜欢
      • 2015-09-11
      • 1970-01-01
      • 1970-01-01
      • 2017-01-23
      • 1970-01-01
      • 2017-10-04
      • 2020-06-01
      • 1970-01-01
      • 2020-07-12
      相关资源
      最近更新 更多