ODataModel v2中的URI编码
问题描述:
我创建了一个SAPUI5表小部件并确保它可以正常工作。现在,当点击一行时,详细视图被加载,但没有数据存在。服务器公开一个实体Site,其主键类型为“string”。ODataModel v2中的URI编码
客户机侧代码如下(假设oModel是ODataModel,sSiteCode是可包含西里尔字符构成的字符串):
// sSiteCode may contain Cyrillic characters
var oKey = {
SiteCode: sSiteCode
};
var sPath = "/" + oModel.createKey("Sites", oKey);
this.getView().bindElement({path: sPath});
事实证明,如果sSiteCode =“б”(即包含西里尔字符),则GET请求将被(经由配料)发送到以下URI:
http://<server>:<port>/odata/Sites('б')
然而,服务器不能解析该URI(和随后用404回复),因为它不知道使用什么编码。我修补的方法ODataModel.prototype._createRequestUrl如下:
sNormalizedPath = this._normalizePath(sPath, oContext);
sNormalizedPath = encodeURI(sNormalizedPath); // my addition
然后它似乎工作,对于这种特殊情况。我想知道这是一个错误还是一个功能,接下来我应该怎么做?
仅供参考,我正在使用OpenUI5 1.32.11。
答
而不是发送
http://<server>:<port>/odata/Sites('б')
实际字符串发送到服务器应该是
http://<server>:<port>/odata/Sites(%27б%27)
哪个是encodeURI()
调用的结果。由于UI5允许您自由定义模型URL及其参数,因此必须注意正确的URI编码(以及所有参数)。
所以在我看来,这不是一个错误,而是配置URI的可能性,而没有UI5的“黑盒子”行为。
如果您确实认为这是一个值得修复的bug,请将其发布到他们的github存储库中:https://github.com/SAP/openui5/issues – Marc
感谢您的建议Marc。我已经提交了一张票:https://github.com/SAP/openui5/issues/830 –