如何在OIC REST适配器中配置带JSON过滤器的USDA GET API调用?
解决OIC REST适配器调用USDA GET API的JSON过滤参数问题
核心问题分析
USDA的目标API要求将JSON格式的过滤条件直接作为filter查询参数传递,但OIC的REST适配器默认配置GET查询参数时,会自动对JSON中的特殊字符(如大括号、引号、斜杠)进行重复编码,导致API无法解析参数;而浏览器、Postman会自动处理正确的URL编码逻辑,所以直接在OIC中填写原始JSON会失败。
具体解决步骤
1. 手动生成正确URL编码的过滤字符串
先对原始过滤JSON做URL编码,比如你的示例JSON:
{"filters":[{"fieldName":"Report date","operatorType":"EQUAL","values":["01/10/2018"]}]}
编码后结果为:
%7B%22filters%22%3A%5B%7B%22fieldName%22%3A%22Report+date%22%2C%22operatorType%22%3A%22EQUAL%22%2C%22values%22%3A%5B%2201%2F10%2F2018%22%5D%7D%5D%7D
可通过浏览器控制台执行encodeURIComponent('你的JSON字符串')生成编码结果,无需依赖外部工具。
2. 配置OIC REST适配器的GET查询参数
- 打开OIC REST适配器配置页,选定GET请求方法
- 在「查询参数」模块添加
filter参数,将上述编码后的字符串填入参数值 - 保存配置后发起测试,此时OIC会直接传递正确编码的参数,USDA API可正常解析
3. 动态过滤条件的处理方案
如果需要动态修改过滤条件(如切换日期),不要写死编码字符串:
- 在OIC集成流中,用赋值动作拼接生成原始JSON过滤对象
- 调用OIC内置函数
fn:encodeURIComponent()对整个JSON字符串编码 - 将编码结果赋值给
filter查询参数后,再发起GET请求
4. 验证请求有效性
在OIC监控日志中查看实际发送的请求URL,确认filter参数的编码格式与浏览器/Postman中的请求完全一致,以此排查是否存在编码错误。
关于POST请求体的说明
USDA该API的接口规范明确要求通过GET请求的查询参数接收过滤条件,POST请求体不符合其设计逻辑,因此会被拒绝,必须严格遵循API要求的请求方式传递参数。
内容的提问来源于stack exchange,提问作者pratik swami
相关产品推荐
相关产品推荐

