我试图将变量中的json有效负载作为值传递,以便使用engine-rest启动流程定义,如下所示:
API:
身体:
{
"variables": {
"payload": {
"value": {
"mode": "email",
"meta": [{
"key": "topic",
"value": "weather"
}, {
"key": "qos",
"value": "2"
}]
},
"type": "Json"
}
}
}
但它提供了400个错误请求,错误如下:-必须为SerializableValue类型'Json‘提供'null’或字符串值。
此外,我在BPMN过程中使用了一个表达式来获取一个键值对,如下所示,它还抛出了错误:-
${S(payload).prop("mode").stringValue() == 'email'}
现在的工作步骤:-当我尝试以字符串格式发送body json有效负载时,它工作得很好。
API:
正文:
{
"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,这样我就不需要像上面的工作示例那样将它转换为string了。
发布于 2019-12-05 05:05:25
您只应该将类型更改为"json",例如:
{
"variables": {
"broker": {
"value": "{\"name\":\"Broker Name\"}",
"type": "json"
}
}
}
发布于 2018-12-23 03:37:39
这是rest引擎API中的设计,它们也支持其他数据格式,所以它必须是一个转义的JSON字符串,参见https://app.camunda.com/jira/browse/CAM-9617。
解决方案是将转义的JSON字符串作为值传递,正如您前面所指出的。如果引擎在类路径上有一个与给定值匹配的Jackson,也可以使用"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"
}
}
}
}
https://stackoverflow.com/questions/50771870
复制相似问题