[英]pass json in process variables in camunda process
我正在嘗試將變量中的 json 有效負載作為值傳遞以使用 engine-rest api 啟動流程定義,如下所示:-
應用程序接口:
身體 :
{
"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 有效負載時,它工作正常。
應用程序接口:
身體:
{
"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 類型名稱:
例如:
{
"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.