Pra*_*gat 5 javascript java json camunda camunda-modeler
我正在尝试将变量中的 json 有效负载作为值传递以使用 engine-rest api 启动流程定义,如下所示:-
应用程序接口:
身体 :
{
"variables": {
"payload": {
"value": {
"mode": "email",
"meta": [{
"key": "topic",
"value": "weather"
}, {
"key": "qos",
"value": "2"
}]
},
"type": "Json"
}
}
}
Run Code Online (Sandbox Code Playgroud)
但它给出了 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"
}
}
}
Run Code Online (Sandbox Code Playgroud)
我在这里使用相同的 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);
}
// ...
}
Run Code Online (Sandbox Code Playgroud)
所以我希望这个有效负载作为整个过程的 json,这样我就不需要像上面的工作示例那样将它转换为字符串。
这是其余引擎 API 中的设计,它们也支持其他数据格式,因此它必须是转义的 JSON 字符串,请参阅https://app.camunda.com/jira/browse/CAM-9617。
解决方案是将转义的 JSON 字符串作为值传递,正如您上面指出的那样。"type": "Object"如果引擎的类路径上有一个与给定值匹配的 Jackson Java Bean,也可以使用。您在对象中提供 bean 类型名称valueInfo:
例如:
{
"variables": {
"payload": {
"value": "{\"mode\": \"email\",\"meta\": [{\"key\": \"topic\",\"value\": \"weather\"},{\"key\": \"qos\",\"value\": \"2\"}]}",
"type": "String",
"valueInfo": {
"objectTypeName": "my.own.BeanWithModeAndMetaProps",
"serializationDataFormat": "application/json"
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5598 次 |
| 最近记录: |