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

如何在Camunda脚本任务中访问输入JSON变量及修改响应JSON

解决Camunda Script Task访问Postman传入变量及修改响应JSON问题

一、解决变量访问报错问题

直接写id2报错是因为Camunda流程变量不会直接暴露为脚本的全局属性,必须通过execution对象获取。根据你传入参数的方式,分两种场景处理:

场景1:Postman将JSON键作为独立流程变量传入

如果你的Postman请求是按Camunda标准格式,把每个键作为单独变量传入(比如调用/process-definition/{key}/start接口),请求体示例:

{
  "variables": {
    "id2": {
      "value": "12345678",
      "type": "String"
    }
  }
}

在Script Task的Groovy脚本中,通过execution.getVariable()获取变量值:

// 获取传入的id2变量
def id2Value = execution.getVariable("id2")
println id2Value // 输出12345678

场景2:Postman将整个JSON作为单个JSON类型变量传入

如果你把整个JSON作为一个变量传入,请求体示例:

{
  "variables": {
    "inputPayload": {
      "value": "{\"id2\":\"12345678\"}",
      "type": "Json"
    }
  }
}

Camunda 7.10+版本会自动将Json类型变量解析为Map,直接访问键即可:

// 获取已解析的JSON变量
def payload = execution.getVariable("inputPayload")
println payload.id2 // 输出12345678

如果是低版本Camunda,变量是JSON字符串,需要手动解析:

import groovy.json.JsonSlurper

def payloadStr = execution.getVariable("inputPayload")
def payload = new JsonSlurper().parseText(payloadStr)
println payload.id2 // 输出12345678

二、修改响应JSON的方法

Camunda默认的流程启动接口返回流程实例信息,要自定义响应可以用以下两种方式:

方式1:设置流程输出变量,后续接口获取

在Script Task中构造自定义响应内容,保存为流程变量:

// 构造自定义响应JSON
def customResponse = [
  "code": 200,
  "message": "处理成功",
  "data": [
    "processId": execution.processInstanceId,
    "originalId": execution.getVariable("id2"),
    "processedId": execution.getVariable("id2") + "_handled"
  ]
]
// 将响应内容存入流程变量
execution.setVariable("customResponse", customResponse)

流程启动后,调用/process-instance/{processInstanceId}/variables/customResponse接口,即可获取这个自定义的JSON响应。

方式2:自定义REST接口(推荐复杂场景)

如果需要在流程启动时直接返回自定义响应,可以编写Camunda REST扩展或独立的Spring Boot接口:

  1. 在接口中接收Postman的请求参数
  2. 调用Camunda API启动流程并传入变量
  3. 处理变量后构造自定义JSON返回给Postman

示例简化代码(Spring Boot环境):

@PostMapping("/start-process")
public ResponseEntity<Map<String, Object>> startProcess(@RequestBody Map<String, Object> request) {
    // 构造Camunda流程变量
    Map<String, Object> variables = new HashMap<>();
    variables.put("id2", request.get("id2"));
    
    // 启动流程
    ProcessInstance processInstance = runtimeService.startProcessInstanceByKey("your-process-key", variables);
    
    // 构造自定义响应
    Map<String, Object> response = new HashMap<>();
    response.put("status", "success");
    response.put("processInstanceId", processInstance.getId());
    response.put("processedData", request.get("id2") + "_processed");
    
    return ResponseEntity.ok(response);
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 08:50:42