在camunda过程中传递过程变量中的json

时间:2018-06-09 07:18:51

标签: javascript java json camunda camunda-modeler

我试图将变量中的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以下错误: - 必须提供' null'或SerializableValue类型值的字符串值' Json'。

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

$ {S(有效载荷).prop("模式")。stringValue()=='电子邮件'}

现在的工作步骤: - 当我尝试以字符串格式发送body 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"
      }
  }
}

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

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,这样我就不需要像上面的工作示例那样将它转换为字符串。

2 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:0)

显然,在V7.10.0之前的其余版本中这是一个缺点,我为此创建了一个Jira问题: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"
            }
      }
  }
}