5

以下のように、engine-rest api を使用してプロセス定義を開始するために、値として変数に 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": "Json"
      }
  }
}

しかし、それは以下のエラーで 400 BAD REQUEST を与えています:- SerializableValue タイプ 'Json' の値に 'null' または文字列値を提供する必要があります。

また、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として使用して、上記の作業例のように文字列に変換する必要がないようにします。

4

2 に答える 2

2

タイプを「json」にのみ変更する必要があります。例:

{
    "variables": {
        "broker": {
            "value": "{\"name\":\"Broker Name\"}",
            "type": "json"
        }
    }
}
于 2019-12-05T13:05:25.213 に答える