如何通过 REST API 更新问题状态?

Ash*_*ain 3 c# jira fiddler jira-rest-api

我想从其余 api 将问题状态更新为已完成或为 true,我尝试了一些链接和文档,但失败且不起作用,我的 json 数据和 url 如下,请查看并让我知道我错在哪里。

我点击此链接更新问题状态已完成。

jQuery.ajax({
    url :'https://myurl.com/rest/api/latest/issue/10635',
    type: 'PUT',
    beforeSend : function(xhr) {
           xhr.setRequestHeader("Authorization", "Basic " + 'QXNjiYIklOZvcxlxhZ3NodXNldA==');
    },
    data: JSON.stringify({"status":{"id":"10635","name":"done"}}}),
    dataType: 'json',
    contentType:'application/json; charset=utf8',
    success: function(data){
    console.log(data);
    }
})
Run Code Online (Sandbox Code Playgroud)

我的json如下

{"status":{"id":"10635","name":"done"}}}
Run Code Online (Sandbox Code Playgroud)

我检查了 fiddler 上的响应,但在 fiddler 响应中出现以下错误。

{“errorMessages”:[“需要‘字段’或‘更新’之一”],“错误”:{}}

之后我将 json 数据更改如下,但也不起作用,

{"update":{"status":{"id":"10635","name":"done"}}}
Run Code Online (Sandbox Code Playgroud)

然后我在小提琴中看到了如下错误。

{“errorMessages”:[“无法从 START_OBJECT 令牌中反序列化 java.util.ArrayList 的实例\n [来源:org.apache.catalina.connector.CoyoteInputStream@19d2e36;行:1,列:12](通过引用链: com.atlassian.jira.rest.v2.issue.IssueUpdateBean[\"update\"])"]}

它浪费了我大约 2.5 个小时的时间,请帮助我哪里错了?

Ash*_*ain 5

我使用了错误的方法,为了将 Jira 问题的状态设置为已完成,您必须向服务器发送两个请求(1)获取请求,该请求将返回问题的事务 ID。(2) 借助事务 ID 将请求发送到服务器,您可以完成此问题,我尝试演示以下内容。

(1) 使用以下 url 向 JIRA 服务器发送 Get 请求(POST 请求将使用相同的 url)。

https://mycompany.com/rest/api/2/issue/{issueidORkey}/transitions?expand=expand.fields
Run Code Online (Sandbox Code Playgroud)

它将以 json 模式返回以下类型的详细信息。

{
"expand": "transitions",
   "transitions": [
       {
          "id": "25",
          "name": "Start Progress",
          "to": {
              "self": "https://mycompany.com/rest/api/2/status/3",
              "description": "This issue is being actively worked on at the moment by the                  assignee.",
              "iconUrl": "https://mycomapny.com/images/icons/statuses/inprogress.png",
              "name": "In Progress",
              "id": "3",
              "statusCategory": {
                   "self": "https://mycompany.com/rest/api/2/statuscategory/4",
                   "id": 4,
                   "key": "indeterminate",
                   "colorName": "yellow",
                   "name": "In Progress"
                }
          }
    }
}
Run Code Online (Sandbox Code Playgroud)

如上所示,您可以看到有过渡 --> id=25,此 id 将用于 POST 请求,对我来说,我创建了如下 JSON,现在 (2) 通过与上面使用的相同的 url 发送 POST 请求。

    {
    "update": {
        "comment": [{
            "add": {
                "body": "Comment body"
            }
        }]
    },
    "fields": {},
    "transition": {
        "id": "25"
    }
}
Run Code Online (Sandbox Code Playgroud)

对于我来说,字段属性不是必需的,因此我能够更新问题状态已完成。:)