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

如何在WSO2 EI6.6.0中调用带JSON请求体的HTTP GET API

解决方案

1. 修改Axis2全局配置

WSO2 EI基于Axis2框架,默认的HTTP传输层会过滤GET请求的请求体,需要修改全局配置开启允许GET带请求体的功能:

打开EI_HOME/conf/axis2/axis2.xml,分别找到HTTP和HTTPS传输发送器的配置节点,添加允许参数:

HTTP传输发送器

找到以下节点:

<transportSender name="http" class="org.apache.synapse.transport.nhttp.HttpCoreNIOSender">

在节点内部新增参数:

<parameter name="AllowGetMethodWithPayload">true</parameter>

HTTPS传输发送器(若使用HTTPS调用下游)

找到以下节点:

<transportSender name="https" class="org.apache.synapse.transport.nhttp.HttpCoreNIOSender">

同样添加参数:

<parameter name="AllowGetMethodWithPayload">true</parameter>

修改完成后,重启WSO2 EI服务使配置生效。

2. 调整序列配置

在你的序列中补充必要属性,确保请求体被正确携带并发送:

  • 添加Content-Type传输头,明确请求体格式为JSON
  • 移除NO_ENTITY_BODY属性(EI默认会为GET请求设置该属性,导致丢弃请求体)

调整后的完整序列代码:

<sequence name="moz-simo-billpay-general-process-request-seq" xmlns="http://ws.apache.org/ns/synapse">
    <payloadFactory media-type="json">
        <format>
            {
              "Document": {
                "ServiceReq": {
                  "Hdr": {
                    "MsgFctn": "$2",
                    "PrtcolVrsn": "$3",
                    "MsgUUID": ""
                  },
                  "ReqData": $1
                }
              }
            }
        </format>
        <args>
            <arg evaluator="xml" expression="$ctx:incomingPayload"
                literal="false" xmlns:ns="http://org.apache.synapse/xsd"/>
            <arg evaluator="xml" expression="$ctx:operationCode"
                literal="false" xmlns:ns="http://org.apache.synapse/xsd"/>
            <arg evaluator="xml" expression="$ctx:protocol"
                literal="false" xmlns:ns="http://org.apache.synapse/xsd"/>
        </args>
    </payloadFactory>
    <property
        expression="fn:concat($ctx:mozSimoBillpayUrl, '/BillPay/V2.0.1.0/Billers')"
        name="uri.var.mozSimoBillPayUrl" scope="default" type="STRING" xmlns:ns="http://org.apache.synapse/xsd"/>
    <property name="HTTP_METHOD" scope="axis2" type="STRING" value="GET"/>
    <!-- 明确请求体格式为JSON -->
    <property name="Content-Type" scope="transport" type="STRING" value="application/json"/>
    <!-- 移除默认的NO_ENTITY_BODY属性,确保请求体被发送 -->
    <property action="remove" name="NO_ENTITY_BODY" scope="axis2"/>
    <property action="remove" name="REST_URL_POSTFIX" scope="axis2"/>
    <property name="DISABLE_CHUNKING" scope="axis2" type="STRING" value="true"/>
    <property expression="concat('Bearer ',$ctx:bearerToken)"
        name="Authorization" scope="transport" xmlns:ns="http://org.apache.synapse/xsd"/>
    <call>
        <endpoint>
            <http uri-template="{uri.var.mozSimoBillPayUrl}">
                <timeout>
                    <duration>120000</duration>
                    <responseAction>fault</responseAction>
                </timeout>
                <suspendOnFailure>
                    <errorCodes>-1</errorCodes>
                    <initialDuration>0</initialDuration>
                    <progressionFactor>1.0</progressionFactor>
                    <maximumDuration>0</maximumDuration>
                </suspendOnFailure>
                <markForSuspension>
                    <errorCodes>-1</errorCodes>
                </markForSuspension>
            </http>
        </endpoint>
    </call>
    <log level="full"/>
    <property expression="json-eval($)" name="response" xmlns:ns="http://org.apache.synapse/xsd"/>
</sequence>

关键说明

  • AllowGetMethodWithPayload:全局开启Axis2传输层对GET请求携带请求体的支持,这是基础配置。
  • NO_ENTITY_BODY:EI默认会为GET请求设置该属性为true,主动移除该属性可强制传输层保留并发送请求体。
  • Content-Type头:明确告知下游API请求体为JSON格式,避免因格式识别错误导致的返回异常。

内容的提问来源于stack exchange,提问作者Noman Khan

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.25 06:49:58