调用Jira API的PUT请求更新自定义字段时遇构造方法错误
问题分析与解决
你的错误来自两个核心问题:双重JSON序列化,以及文本字段的赋值格式错误。
1. 双重序列化导致API无法解析
你写了data = json.dumps(json.dumps(data)),这会把数据变成字符串的字符串,Jira API接收到后会把外层字符串直接当成IssueUpdateBean的输入,自然找不到对应的构造方法,抛出你看到的错误。
正确的做法是只序列化一次,或者直接用requests的json参数自动处理序列化(更推荐)。
2. 文本字段的赋值格式错误
从/editmeta返回的schema可以看到,这个自定义字段是文本字段(textfield),类型是string,不是多值选项字段。你当前用的set: [{'value': 'xxx'}, {'value': 'xxx'}]是多选选项字段的格式,不适用于文本框。
文本字段只需要直接传入字符串值,如果要传多个Commit ID,用空格、逗号或者换行符拼接成单个字符串即可。
修正后的代码
import json import requests # 用逗号拼接多个Commit ID成单个字符串(分隔符可按需调整) commit_ids = '1c1a07d49af1b1cde8a1a7bd93cbbeef8efd50c9, c6f1e31ce0138cba658f769accaac729bebc42d6' data = {'update': {'customfield_25305': [{'set': commit_ids}]}} # 推荐方案:用requests的json参数,自动处理序列化和Content-Type upload = requests.put(url, headers=headers, json=data) # 备选方案:手动序列化+指定Content-Type # headers['Content-Type'] = 'application/json' # data_str = json.dumps(data) # upload = requests.put(url, headers=headers, data=data_str) if upload.status_code == 204: print("更新成功") else: print(upload.json())
额外验证点
- 确保headers包含正确的授权信息(如Basic Auth或Bearer Token)
- 确认
url为正确的工单更新接口:https://你的Jira域名/rest/api/2/issue/工单KEY - 文本字段的分隔符可根据业务需求调整(比如换行符
\n)
内容的提问来源于stack exchange,提问作者Tejas S
相关产品推荐
相关产品推荐

