You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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
  • site参数的坑:原代码里的site加了/rest/api/2/,这会导致客户端拼接路径错误,只需要填Jira的根域名即可。

如果还是遇到问题,建议先打印出Jira返回的完整错误响应(比如上面代码里的e.response.body),Jira的错误提示通常会很明确,比如告诉你哪个字段格式不对、ID无效等。

内容的提问来源于stack exchange,提问作者scorpion35

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.22 09:31:37