WSO2 ESB调用端点后仅返回指定字段失败问题排查
解决WSO2 ESB返回完整JSON而非单个字段的问题
嘿,我来帮你搞定这个WSO2 ESB的问题!你现在的情况是调用CountryEP后,明明已经提取了想要的countryCode字段到属性里,但ESB还是返回完整的JSON响应——这是因为你只完成了字段提取的步骤,没有修改要返回给客户端的消息体,ESB默认会把调用端点得到的原始完整响应发回去。
下面是具体的修改方案,直接调整你的inSequence配置就行:
1. 添加PayloadFactory Mediator构建自定义响应
在提取uri.var.countryCode属性之后,添加PayloadFactory中介来生成只包含目标字段的JSON响应。这个中介会替换掉原始的完整响应payload:
<payloadFactory media-type="json"> <format>{"countryCode": "$1"}</format> <args> <arg evaluator="xml" expression="$ctx:uri.var.countryCode"/> </args> </payloadFactory>
如果你只需要返回纯字符串(不是JSON对象),可以把format改成"$1",这样返回的就是单独的countryCode字符串值。
2. 发送修改后的响应
在PayloadFactory之后,添加respond中介,让ESB把修改后的响应返回给客户端:
<respond/>
完整的inSequence示例
把这些整合起来,你的inSequence应该是这样的:
<inSequence> <call description=""> <endpoint key="CountryEP"/> </call> <property description="" expression="json-eval($.zones[0].countryCode)" name="uri.var.countryCode" scope="default" type="STRING"/> <!-- 可选:日志打印提取的字段,方便调试 --> <log description=""> <property name="Extracted Country Code" expression="$ctx:uri.var.countryCode"/> </log> <!-- 构建只包含目标字段的新响应 --> <payloadFactory media-type="json"> <format>{"countryCode": "$1"}</format> <args> <arg evaluator="xml" expression="$ctx:uri.var.countryCode"/> </args> </payloadFactory> <!-- 返回修改后的响应 --> <respond/> </inSequence>
这样调整后,ESB就只会返回你需要的单个字段内容,而不是完整的原始JSON啦!
内容的提问来源于stack exchange,提问作者Tazz
相关产品推荐
相关产品推荐

