WSO2 2.1.0内联原型:如何获取非路径类型的变量?
我来帮你搞定WSO2 APIM 2.1.0内联原型里获取查询参数和请求体变量的问题!你已经能拿到路径参数了,其实查询参数和请求体的获取也有现成的Synapse API可以用,分情况给你详细说明:
获取查询参数
在你的内联原型脚本里,通过mc(也就是ScriptMessageContext对象)可以直接获取单个或所有查询参数:
- 单个查询参数:用
mc.getQueryParam("<参数名>")就能拿到对应的值。比如你定义了queryParam这个查询参数,代码示例如下:
// 获取单个查询参数的值 var queryValue = mc.getQueryParam("queryParam"); mc.getLog().info("查询参数queryParam的值:" + queryValue);
- 所有查询参数:如果要批量获取,可以通过
mc.getRequest().getQueryParams()拿到一个参数Map,然后遍历处理:
var queryParamsMap = mc.getRequest().getQueryParams(); // 遍历所有查询参数 var keys = queryParamsMap.keySet().iterator(); while(keys.hasNext()){ var key = keys.next(); var value = queryParamsMap.get(key); mc.getLog().info("查询参数[" + key + "]:" + value); }
获取请求体变量
如果你的API是POST/PUT这类带请求体的方法,分两种常见情况处理:
JSON格式请求体
先读取请求体的内容,再解析成JSON对象来获取字段:
// 获取请求体的OMElement对象 var payloadElement = mc.getRequest().getPayload(); // 转换为JSON字符串 var payloadStr = payloadElement.toString(); // 解析为JSON对象 var payloadJson = JSON.parse(payloadStr); // 获取指定字段的值,比如bodyParam var bodyValue = payloadJson.bodyParam; mc.getLog().info("请求体参数bodyParam的值:" + bodyValue);
表单格式请求体(application/x-www-form-urlencoded)
这种情况可以直接获取表单参数的Map,和查询参数的处理方式类似:
var formParamsMap = mc.getRequest().getFormParams(); // 获取单个表单参数 var formValue = formParamsMap.get("formParam"); mc.getLog().info("表单参数formParam的值:" + formValue);
需要注意的是,你的Swagger示例里是GET请求,所以主要用到查询参数的获取方法;如果后续有POST/PUT接口,再用请求体的处理逻辑就行。这些方法在WSO2 APIM 2.1.0的内联原型脚本中都是原生支持的,直接替换到你的示例代码里就能生效~
内容的提问来源于stack exchange,提问作者Sourcerer
相关产品推荐
相关产品推荐

