【问题标题】:pass json in process variables in camunda process在camunda进程的进程变量中传递json
【发布时间】:2018-11-19 04:15:45
【问题描述】:

我正在尝试将变量中的 json 有效负载作为值传递,以使用 engine-rest api 启动流程定义,如下所示:-

API:

http://localhost:8080/engine-rest/process-definition/processService:1:9459dbe9-6b2c-11e8-b9e8-28d2447c697a/start

身体:

{
  "variables": {
      "payload": {
        "value": {
            "mode": "email",
            "meta": [{
                "key": "topic",
                "value": "weather"
            }, {
                "key": "qos",
                "value": "2"
            }]
        },
        "type": "Json"
      }
  }
}

但它给出了 400 BAD REQUEST 并出现以下错误:- 必须为 SerializableValue 类型“Json”的值提供“null”或 String 值。

我还在我的 BPMN 流程中使用了一个表达式来获取一个如下所示的键值对,它也给我带来了错误:-

${S(payload).prop("mode").stringValue() == 'email'}

现在的工作步骤:- 当我尝试以字符串格式发送正文 json 有效负载时,它工作正常。

API:

http://localhost:8080/engine-rest/process-definition/processService:1:9459dbe9-6b2c-11e8-b9e8-28d2447c697a/start

主体:

{
  "variables": {
      "payload": {
        "value": "{\"mode\": \"email\",\"meta\": [{\"key\": \"topic\",\"value\": \"weather\"},{\"key\": \"qos\",\"value\": \"2\"}]}",
        "type": "String"
      }
  }
}

我在这里使用相同的 java 代码来获取 json 有效负载-

public void notify(DelegateExecution delegateProcessExecution) throws Exception {
   Object notificationPayload =
       delegateProcessExecution.getVariable("payload");

    if (null != notificationPayload) {
        String notifyPayload = notificationPayload.toString();  
        JSONObject inputJson = new JSONObject(notifyPayload);
    }
    // ...
}

所以我希望这个有效载荷作为整个过程的 json,这样我就不需要像上面的工作示例那样将它转换为字符串。

【问题讨论】:

    标签: javascript java json camunda camunda-modeler


    【解决方案1】:

    这是在其余引擎 API 中设计的,它们也支持其他数据格式,因此它必须是转义的 JSON 字符串,请参阅 https://app.camunda.com/jira/browse/CAM-9617

    正如您在上面指出的那样,解决方案是将转义的 JSON 字符串作为值传递。如果引擎在类路径上有一个与给定值匹配的Jackson Java Bean,也可以使用"type": "Object"。您在 valueInfo 对象中提供 bean 类型名称:

    https://docs.camunda.org/manual/7.10/reference/rest/process-definition/post-start-process-instance/#request-body

    例如:

    {
      "variables": {
          "payload": {
            "value": "{\"mode\": \"email\",\"meta\": [{\"key\": \"topic\",\"value\": \"weather\"},{\"key\": \"qos\",\"value\": \"2\"}]}",
            "type": "String",
            "valueInfo": {
                "objectTypeName": "my.own.BeanWithModeAndMetaProps",
                "serializationDataFormat": "application/json"
                }
          }
      }
    }
    

    【讨论】:

      【解决方案2】:

      您应该只将类型更改为“json”,例如:

      {
          "variables": {
              "broker": {
                  "value": "{\"name\":\"Broker Name\"}",
                  "type": "json"
              }
          }
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-06-13
        • 2017-05-02
        • 1970-01-01
        相关资源
        最近更新 更多