如何在Mirth中筛选客户端API响应数据并发送至指定数据库?
解决Mirth中处理API响应并过滤字段后发送到数据库的问题
核心逻辑
先把HTTP Sender返回的响应解析成可操作的JSON/XML对象,过滤掉不需要的字段,再把处理后的数据映射到数据库或者传递给其他目标。
1. 解析API响应
在目标连接器的Response标签页里,先把响应字符串转成Mirth能操作的对象:
- 如果是JSON响应:
var responseObj = JSON.parse(response); // 存到通道映射,后续步骤直接用 channelMap.put("parsedResponse", responseObj); - 如果是XML响应:
var responseXml = XMLUtil.toXml(response); channelMap.put("parsedResponse", responseXml);
2. 过滤不需要的字段
根据响应格式处理:
- JSON场景:直接删除不需要的属性,比如要去掉
password和internalId:
要是需要保留的字段少,用白名单更高效:var filteredObj = channelMap.get("parsedResponse"); delete filteredObj.password; delete filteredObj.internalId; // 嵌套字段也一样,比如filteredObj.user.extraInfo delete filteredObj.user.extraInfo; channelMap.put("filteredData", filteredObj);var allowedFields = ["name", "email", "phone"]; var filteredObj = {}; var originalObj = channelMap.get("parsedResponse"); allowedFields.forEach(function(field) { if (originalObj.hasOwnProperty(field)) { filteredObj[field] = originalObj[field]; } }); channelMap.put("filteredData", filteredObj); - XML场景:用
XMLUtil.removeNode删除指定节点:var filteredXml = channelMap.get("parsedResponse"); XMLUtil.removeNode(filteredXml, "password"); XMLUtil.removeNode(filteredXml, "internalId"); // 嵌套节点比如/user/extraInfo XMLUtil.removeNode(filteredXml, "user/extraInfo"); channelMap.put("filteredData", filteredXml);
3. 发送到数据库或其他目标
数据库目标(Database Writer)
- 在数据库连接器的Destination标签页,写好插入/更新的SQL语句,比如:
INSERT INTO user_table (name, email, phone) VALUES (?, ?, ?) - 然后在Mapping里绑定过滤后的数据:
- 第一个参数填
${filteredData.name}(JSON)或${filteredXml.name}(XML) - 后面的参数依次对应需要的字段即可,只映射你要保留的内容。
- 第一个参数填
发送到其他通道/目标
- 把过滤后的数据转成字符串:JSON用
JSON.stringify(filteredData),XML用XMLUtil.toString(filteredXml) - 把字符串放到
messageObject.getEncodedData()或者通道映射里,再通过通道间连接器(Channel Reader/Writer)发送给其他通道。
小提示
- 直接在Response的Transformer里完成过滤,后续目标可以直接用处理好的数据,不用重复解析。
- 不确定字段结构的话,用
logger.info(JSON.stringify(responseObj))打印响应结构,方便调试。
内容的提问来源于stack exchange,提问作者Shamaque Shaikh
相关产品推荐
相关产品推荐

