如何通过JIRA REST API为故事添加fixVersions并修改状态
Jira REST API 更新fixVersions与状态报错解决方案
核心错误原因
- 状态流转接口的HTTP方法、请求路径使用错误:Jira REST API 规则中,更新issue普通字段(fixVersions、评论等)使用
PUT /rest/api/2/issue/{issueKey},但执行工作流状态跳转必须调用独立的POST /rest/api/2/issue/{issueKey}/transitions接口。你之前将transition参数直接塞到普通issue更新接口中,要么触发反序列化报错返回400,要么参数被接口忽略返回204但不生效,这是问题的核心诱因。 - 报错信息中明确出现第三方插件
com.quisapps.jira.fieldsecurity(字段权限管控插件)的拦截标识,该插件会改写请求包装类,请求结构不符合其校验规则时也会抛出ArrayList反序列化异常。 - 你直接复用网上查到的transition id=41不具备通用性:不同项目、不同工作流的状态流转ID是独立配置的,不存在全局固定值,直接用大概率匹配不到目标状态。
正确操作步骤
1. 添加fixVersions字段值
使用PUT方法调用普通issue更新接口,请求头必须指定Content-Type: application/json,两种合法传参方式二选一即可:
- 追加版本(不覆盖原有fixVersions值)请求体:
{ "update": { "fixVersions": [ { "add": { "name": "r1.0" } } ] } }
- 全量覆盖版本请求体:
{ "fields": { "fixVersions": [ {"name": "r1.0"} ] } }
如果调用时仍报反序列化错误,优先检查字段安全插件是否对该字段配置了拦截规则,临时放开对应规则即可正常调用。
2. 查询当前issue可用的流转ID
禁止直接使用外部参考的固定ID,先调用接口获取当前issue实际支持的流转列表:
- 请求方法与地址:
GET <JIRA_URL>:<JIRA_PORT>/rest/api/2/issue/<JIRA_ISSUE>/transitions - 从返回结果中找到目标状态为
accepted对应的transition id,替换原有写死的"41"。
3. 执行状态跳转
必须使用POST方法调用专属的transitions接口,不要调用普通issue更新接口,需要同步添加评论可以直接放在请求体中:
- 请求方法与地址:
POST <JIRA_URL>:<JIRA_PORT>/rest/api/2/issue/<JIRA_ISSUE>/transitions - 请求体示例:
{ "update": { "comment": [ { "add": { "body": "Comment body" } } ] }, "transition": { "id": "上一步查询到的accepted状态对应ID" } }
注意:请求体不需要传空的fields对象,多余空字段可能触发第三方插件的校验报错
验证规则
- transitions接口调用成功的标准返回就是204 No Content,调用后可以发GET请求拉取issue详情,确认fixVersions值、issue状态是否符合预期即可。
- 若持续报400错误,先校验JSON格式是否合法(无多余逗号、引号闭合正确),再排查字段安全插件的拦截配置,报错栈中已经明确该插件参与了请求处理,是常见的异常来源。
内容的提问来源于stack exchange,提问作者pruthvi
相关产品推荐
相关产品推荐

