簡體   English   中英

在camunda進程的進程變量中傳遞json

[英]pass json in process variables in camunda process

我正在嘗試將變量中的 json 有效負載作為值傳遞以使用 engine-rest 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”或字符串值。

此外,我在 BPMN 流程中使用了一個表達式來獲取如下所示的鍵值對,它也引發了我的錯誤:-

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

現在的工作步驟:- 當我嘗試以字符串格式發送正文 json 有效負載時,它工作正常。

應用程序接口:

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,這樣我就不需要像上面的工作示例那樣將它轉換為字符串。

您應該只將類型更改為“json”,例如:

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

這顯然是 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"
            }
      }
  }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM