在WSO2 API Manager 4.1.0中修改JSON负载字段名并移除字段
在WSO2 API Manager 4.1.0中实现JSON响应字段过滤与驼峰式重命名
你可以通过WSO2 APIM内置的中介Mediator功能实现需求,以下是两种可行方案:
方案1:使用Payload Factory Mediator(固定结构场景)
适合响应结构固定的情况,通过构造新的JSON payload直接过滤并重命名字段。
配置代码(添加到API的Out Sequence中)
<!-- 先清理原有payload,仅保留result数组并转换字段名 --> <payloadFactory media-type="json"> <format> { "result": [ { "identificadorImovel": $1, "codigoImovel": "$2", "codigoVersao": "$3", "tipoOrigem": "$4", "protocolo": "$5", "dataUltimoProtocolo": "$6", "statusImovel": "$7", "tipoImovel": "$8" } ] } </format> <args> <arg evaluator="json" expression="$body.result[0].imovel_identificador_imovel"/> <arg evaluator="json" expression="$body.result[0].imovel_codigo_imovel"/> <arg evaluator="json" expression="$body.result[0].imovel_codigo_versao"/> <arg evaluator="json" expression="$body.result[0].imovel_tipo_origem"/> <arg evaluator="json" expression="$body.result[0].imovel_protocolo"/> <arg evaluator="json" expression="$body.result[0].imovel_data_ultimo_protocolo"/> <arg evaluator="json" expression="$body.result[0].imovel_status_imovel"/> <arg evaluator="json" expression="$body.result[0].imovel_tipo_imovel"/> </args> </payloadFactory>
如果result包含多个元素,需要结合Iterate+Aggregate Mediator批量处理:
<!-- 遍历result数组 --> <iterate expression="$body.result" id="resultIterator" sequential="true"> <target> <sequence> <!-- 转换单个元素的字段名 --> <payloadFactory media-type="json"> <format> { "identificadorImovel": $1, "codigoImovel": "$2", "codigoVersao": "$3", "tipoOrigem": "$4", "protocolo": "$5", "dataUltimoProtocolo": "$6", "statusImovel": "$7", "tipoImovel": "$8" } </format> <args> <arg evaluator="json" expression="$body.imovel_identificador_imovel"/> <arg evaluator="json" expression="$body.imovel_codigo_imovel"/> <arg evaluator="json" expression="$body.imovel_codigo_versao"/> <arg evaluator="json" expression="$body.imovel_tipo_origem"/> <arg evaluator="json" expression="$body.imovel_protocolo"/> <arg evaluator="json" expression="$body.imovel_data_ultimo_protocolo"/> <arg evaluator="json" expression="$body.imovel_status_imovel"/> <arg evaluator="json" expression="$body.imovel_tipo_imovel"/> </args> </payloadFactory> </sequence> </target> </iterate> <!-- 聚合转换后的元素,重新组装成result数组 --> <aggregate id="resultIterator"> <completeCondition> <messageCount max="-1" min="-1"/> </completeCondition> <onComplete expression="$body"> <payloadFactory media-type="json"> <format>{"result": $1}</format> <arg evaluator="json" expression="$body"/> </payloadFactory> </onComplete> </aggregate>
方案2:使用Script Mediator(动态场景)
适合需要处理动态数量元素或更灵活逻辑的情况,通过JavaScript脚本实现转换。
配置代码(添加到API的Out Sequence中)
<script language="js"> // 获取原响应的JSON payload var payload = mc.getPayloadJSON(); var transformedItems = []; // 遍历result数组,逐个转换字段名 payload.result.forEach(function(item) { var transformedItem = { identificadorImovel: item.imovel_identificador_imovel, codigoImovel: item.imovel_codigo_imovel, codigoVersao: item.imovel_codigo_versao, tipoOrigem: item.imovel_tipo_origem, protocolo: item.imovel_protocolo, dataUltimoProtocolo: item.imovel_data_ultimo_protocolo, statusImovel: item.imovel_status_imovel, tipoImovel: item.imovel_tipo_imovel }; transformedItems.push(transformedItem); }); // 设置转换后的新payload mc.setPayloadJSON({ result: transformedItems }); </script>
配置步骤
- 登录WSO2 APIM管理控制台,进入目标API的编辑页面
- 切换到Message Mediation标签,选择Out Sequence
- 将上述中介代码添加到Out Sequence的
Sendmediator之前 - 保存并重新发布API,调用后即可验证转换后的响应格式
内容的提问来源于stack exchange,提问作者filhocf
相关产品推荐
相关产品推荐

