Worklight HTTP适配器 - 具有特殊字符的参数

时间:2014-09-17 15:42:53

标签: ibm-mobilefirst worklight-adapters worklight-studio

我正在构建一个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中。我怀疑这可能是因为查询值中包含特殊字符(&#39;:&#39;和&#39; =&#39;)。我尝试使用%3A和%3D进行编码但没有运气。

根据其他用户的建议,我也尝试将查询参数直接包含在带编码的路径中,但仍然没有从RAM返回任何内容:

var input = {
    method : 'get',
    returnedContentType : 'xml',
    path : 'tools/cm/ram/oslc/simpleQuery?query=ram_asset:community%3D%22My+Community%22'
};

WL适配器是否可能无法正确处理参数?关于如何解决它的任何想法?

1 个答案:

答案 0 :(得分:1)

我终于找到了解决方案。搜索值需要有双引号 - RAM不接受单引号。最终的解决方案是     params = {query: 'ram_asset:community="My Community"'};

如果你在想“这不是他开始的吗?”,你是对的。我还有一只红鲱鱼让我失望,因为我的社区只允许经过身份验证的用户查看其中包含的资产。我的Firefox浏览器会话已经过身份验证,但Worklight适配器未经过身份验证,这解释了为什么浏览器和RESTClient看到我的资产而适配器没有看到。还有其他公共社区,所以适配器看到资产,而不是我的。当我允许未经身份验证的用户在我的社区中查看资产时,适配器开始看到它们。