You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

WSO2 EI向后端发送JSON数组负载格式异常求助

WSO2 EI 负载格式错误问题排查与解决

后端要求的负载格式为JSON数组:

[
    {
        "data1": "value1"
    },
    {
        "data2":"value2"
    }
]

你遇到的核心问题出在Payload Factory的用法上,以下是具体分析和解决方案:

问题根源

你的代码中,DataToPostJson已经是序列化完成的JSON数组字符串(例如[{"register":"xxx",...}]),但使用media-type="json"的Payload Factory时,组件会将这个字符串参数当作JSON的字符串值处理,最终生成的消息体是被引号包裹且转义的字符串(如"[{\"register\":\"xxx\",...}]"),而非后端需要的原生JSON数组格式。

解决方案

方案1:用Script Mediator直接设置JSON payload

替换原有的Payload Factory节点为以下代码,直接解析JSON字符串并设置为消息体:

<script language="js"><![CDATA[
// 解析JSON字符串为对象,直接设置为消息体
var payloadJson = JSON.parse(mc.getProperty("DataToPostJson"));
mc.setPayloadJSON(payloadJson);
]]></script>

方案2:用Property Mediator直接设置MESSAGE属性

也可以通过设置MESSAGE属性直接覆盖消息体,同时确保messageType配置正确:

<property name="MESSAGE" expression="$ctx:DataToPostJson" scope="default" type="STRING"/>
<property name="messageType" scope="axis2" type="STRING" value="application/json"/>

额外验证步骤

  1. 检查日志中DataToPostJson的输出,确认是正确的JSON数组格式,无多余引号或转义字符。
  2. 启用WSO2 EI的Wire日志,查看发送到后端的实际请求内容:
    • 修改repository/conf/log4j2.properties,添加配置:
      logger.org.apache.synapse.transport.http.wire.name = WireLogger
      logger.org.apache.synapse.transport.http.wire.level = DEBUG
      logger.org.apache.synapse.transport.http.wire.additivity = false
      logger.org.apache.synapse.transport.http.wire.appenderRef.CARBON_CONSOLE.ref = CARBON_CONSOLE
      
    • 重启EI后,控制台会输出完整的请求/响应内容,可直接确认发送的负载格式是否符合后端要求。

内容的提问来源于stack exchange,提问作者Aristide Etoumi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.09 03:00:09