如何通过 Jira Rest Api 更新 Jira 问题的状态

Ren*_*his 2 jira-rest-api

我想更改 Jira 上项目问题的状态。状态是Open,我想将其设为固定。我的网址是 PUT https://jiradbg-sandbox.deutsche-boerse.de/rest/api/latest/issue/PID-XX

{
    "update": {
        "fields":{
            "status": [
                {
                    "set": "Fixed"
                }
            ]
        }
    }
} 
Run Code Online (Sandbox Code Playgroud)

响应是:

{
    "errorMessages": ["Can not deserialize instance of java.util.ArrayList out of START_OBJECT token\n at [Source: org.apache.catalina.connector.CoyoteInputStream@5de98556; line: 3, column: 9] 
(through reference chain: com.atlassian.jira.rest.v2.issue.IssueUpdateBean[\"update\"])"]
}
Run Code Online (Sandbox Code Playgroud)

gut*_*tch 6

您在这里遇到两个问题。

第一个问题是update或者fields应该单独提供给 Jira 的编辑问题 API,而不是一个在另一个中。它们具有相同的功能,因此通常只使用其中之一。例如,要更新摘要字段,请提供update

{
  "update": {
    "summary": [
      {
        "set": "Updated by update"
      }
    ]
  }
}
Run Code Online (Sandbox Code Playgroud)

或者fields

{
  "fields": {
    "summary": "Summary set by fields"
  }
}
Run Code Online (Sandbox Code Playgroud)

然而状态字段是一种特殊情况,不能直接更新,这是这里的第二个问题。在 Jira 中更改状态称为过渡。您需要触发转换以将问题转变为您想要的状态。

首先通过调用获取转换 API来识别可用的转换:

GET https://example.net/rest/api/latest/issue/PID-XX/transitions
Run Code Online (Sandbox Code Playgroud)

这会告诉您当前可用的转换,如下所示:

{
  "expand": "transitions",
  "transitions": [
    {
      "id": "21",
      "name": "Fixed",
      "to": {
        "self": "https://example.net/rest/api/2/status/10001",
        "description": "",
        "iconUrl": "https://example.net/images/icons/status_generic.gif",
        "name": "Fixed",
        "id": "10001",
        "statusCategory": {
          "self": "https://example.net/rest/api/2/statuscategory/3",
          "id": 3,
          "key": "done",
          "colorName": "green",
          "name": "Done"
        }
      }
    }
  ]
}
Run Code Online (Sandbox Code Playgroud)

获取id您想要的转换(在本例中为 21),然后将其发布到问题转换 API

POST https://example.net/rest/api/latest/issue/PID-XX/transitions
Run Code Online (Sandbox Code Playgroud)

使用这样的请求主体:

{
  "transition": {
    "id": 21
  }
}
Run Code Online (Sandbox Code Playgroud)

您应该从 Jira 收到 204 HTTP 响应,这表明转换成功。