Jira API报错:"Operation value must be a string"——设置两层嵌套值失败
解决Jira工单创建中requestType两层嵌套字段的问题
嘿,我之前在用jira-ruby创建Jira Service Management(JSM)工单时,也踩过requestType嵌套字段的坑!你提到的两层嵌套其实是JSM特有的结构——requestType字段并不是直接挂在fields下面,而是需要嵌套在requestFieldValues这个父对象里,而且必须用requestType的ID来指定,不能用显示名称。
先给你修正后的完整代码示例,你可以对照调整:
require 'jira-ruby' # 注意这里的site参数不要加/rest/api/2/,客户端会自动处理API路径 options = { :username => jira_username, :password => jira_password, :site => 'https://jiraurl/', :context_path => '', :auth_type => :basic, :read_timeout => 120 } client = JIRA::Client.new(options) # 构建工单字段,重点关注requestType的嵌套结构 fields_options = { "project" => {"key" => "你的项目KEY"}, "summary" => "测试服务请求工单", "description" => "这是工单的描述内容", # 必须指定服务请求对应的issue类型,比如"Service Request"(不同项目可能名称不同) "issuetype" => {"name" => "Service Request"}, # 关键的两层嵌套结构:requestFieldValues -> requestType "requestFieldValues" => { "requestType" => {"id" => "你的requestTypeID"} # 这里一定要填ID,不是名称! } } begin issue = client.Issue.build issue.save(fields: fields_options) puts "工单创建成功!ID: #{issue.id}" rescue JIRA::HTTPError => e puts "创建失败,错误详情:#{e.message}" # 如果想看更详细的错误响应,可以打印e.response.body end
几个必须注意的关键点:
- 确认项目类型:只有Jira Service Management项目才有
requestType字段,普通软件项目不需要这个字段,也识别不了。 - 获取requestType的ID:不要用显示名称(比如"IT支持请求"),必须用ID。你可以通过两种方式获取:
- 在Jira页面打开对应的请求类型,URL里的数字就是ID(比如
https://jiraurl/servicedesk/customer/portal/1/request-type/123里的123) - 调用JSM的API:
GET /rest/servicedeskapi/servicedesk/{服务台ID}/requesttype来获取所有请求类型的ID
- 在Jira页面打开对应的请求类型,URL里的数字就是ID(比如
- site参数的坑:原代码里的
site加了/rest/api/2/,这会导致客户端拼接路径错误,只需要填Jira的根域名即可。
如果还是遇到问题,建议先打印出Jira返回的完整错误响应(比如上面代码里的e.response.body),Jira的错误提示通常会很明确,比如告诉你哪个字段格式不对、ID无效等。
内容的提问来源于stack exchange,提问作者scorpion35
相关产品推荐
相关产品推荐

