Worklight HTTP 适配器 - 带有特殊字符的参数
Posted
技术标签:
【中文标题】Worklight HTTP 适配器 - 带有特殊字符的参数【英文标题】:Worklight HTTP adapter - parameters with special characters 【发布时间】:2014-09-17 15:42:53 【问题描述】:我正在构建一个 HTTP 适配器,以通过其REST API 检索有关 IBM Rational Asset Manager (RAM) 中资产的信息。我可以使用
检索 RAM 中的所有资产https://<server>/tools/cm/ram/oslc/simpleQuery
这在浏览器中运行良好,在 Firefox 中使用 RESTClient 并在调用时从我的适配器中运行
var input =
method : 'get',
returnedContentType : 'xml',
path : 'tools/cm/ram/oslc/simpleQuery'
;
return WL.Server.invokeHttp(input);
问题是我的回复中有数百个资产。我想使用像
这样的查询来过滤来自 RAM 的响应https://<server>/tools/cm/ram/oslc/simpleQuery?query=ram_asset:community="My Community"
这在浏览器或 RESTClient 上运行良好。
但是当我将查询参数添加到我的适配器时
var input =
method : 'get',
returnedContentType : 'xml',
path : 'tools/cm/ram/oslc/simpleQuery',
parameters : "query" : 'ram_asset:community="My Community"'
;
return WL.Server.invokeHttp(input);
RAM 不返回任何资产。这使我相信参数没有正确添加到 URI。我怀疑这可能是因为查询值中有特殊字符(':'和'=')。我尝试使用 %3A 和 %3D 进行编码,但没有成功。
根据其他用户的建议,我也尝试将查询参数直接包含在带有编码的路径上,但仍然没有从 RAM 中返回任何内容:
var input =
method : 'get',
returnedContentType : 'xml',
path : 'tools/cm/ram/oslc/simpleQuery?query=ram_asset:community%3D%22My+Community%22'
;
WL 适配器是否可能未正确处理参数?关于如何解决它的任何想法?
【问题讨论】:
我会尝试按照此问题的答案中所述发送参数:***.com/questions/25600168/… 此帮助是否已满?路径:“工具/cm/ram/oslc/simpleQuery?query=ram_asset:community='我的社区'”。在输入变量中 如果那是你的道路,那么是的。有用吗……? 这肯定给了我其他的尝试,但不幸的是我得到了与路径上的参数相同的结果。我更新了原始帖子以包含该测试。 你可以试试这个参数吗:parameters : "query" : "ram_asset:community='My Community'" 【参考方案1】:我终于找到了解决方案。搜索值需要有双引号 - RAM 不接受单引号。最终的解决方案是
params = query: 'ram_asset:community="My Community"';
如果你在想“他不就是这样开始的吗?”,你是对的。我也有一条红鲱鱼让我失望,因为我的社区只允许经过身份验证的用户查看其中包含的资产。我的 Firefox 浏览器会话通过了身份验证,但 Worklight 适配器没有,这解释了为什么浏览器和 RESTClient 看到了我的资产而适配器没有。还有其他公共社区,所以适配器看到了资产,只是不是我的。当我允许未经身份验证的用户查看我社区中的资产时,适配器开始查看它们。
【讨论】:
以上是关于Worklight HTTP 适配器 - 带有特殊字符的参数的主要内容,如果未能解决你的问题,请参考以下文章
从非 Worklight 应用程序调用 Worklight 适配器