Marklogic URL 编码

Marklogic URL encoding

MarkLogic 版本 - 9.0-6.2

我有一个自定义 REST 端点,它接受 phone 数字作为参数。我的要求是从 URL 中读取此输入 phone 数字,与数据库中的 phone 数字和 return Match/NoMatch.

进行比较

当我通过 SoapUI 工具调用 URL 时 phone 数值为 +1-800-723-1800,我看到 soapUI 工具将 GET 请求发送给 MarkLogic &PhoneNo= %2B1-800-723-1800。当我比较(在 javascript 中使用 ===)这个值与数据库中的值时,我得到了预期的结果。

但是,当通过 IIB(IBM Integration Bus)进行相同的调用时,我在 MarkLogic 日志中看到 GET 请求是 &PhoneNo=+1-800-723-1800(+ 未编码)。现在这个比较结果以 NoMatch 的形式出现,即使我在数据库中有完全相同的值。

这是编码问题吗?我如何处理 MarkLogic 中的编码?

问:根据 "This value" 和 "exact same value in the database",这个值到底是多少?

A:无论什么工具(在本例中为 IIB)正在执行 HTTP 请求而不对 + 进行编码都是不正确的,或者它期望该工具的调用者负责 URL 编码。 由于 URL 编码正确地要求 URL 的每个组件单独编码(而不是整个 URL 本身),通常接受完整 URL 的库会期望它们已经编码——因为它们无法正确编码完整的 URL 本身。

问:IIB URL 使用的是什么代码?可能 该代码 是负责正确编码 URL 的代码(其中 + 应该是百分比编码,否则它将被解码为 space)