如何在manifest.json中创建带Authorization头的OData模型并绑定XML视图
嘿,这个需求完全可以只靠manifest.json来实现,不用在控制器里写任何显式的GET请求代码!我来给你详细拆解步骤:
核心是在manifest.json的sap.ui5节点下,同时配置数据源(dataSources)和模型(models),重点是给数据源加上必填的请求头:
{ "sap.ui5": { "dataSources": { "myODataService": { "uri": "https://your-actual-odata-service-url/", "type": "OData", "settings": { "odataVersion": "2.0", // 按需改成3.0或4.0,匹配你的服务版本 "headers": { // 这里填入你的Authorization头内容 // 示例1:Bearer令牌 "Authorization": "Bearer your-static-access-token-here", // 示例2:Basic认证(需提前把username:password做Base64编码) // "Authorization": "Basic dXNlcjpwYXNzd29yZA==" } } } }, "models": { "": { // 设为默认模型,XML视图可直接绑定无需指定模型名 "dataSource": "myODataService", "settings": { "defaultBindingMode": "TwoWay", // 根据业务需求选择绑定模式 "useBatch": false // 如果你的服务不支持批量请求,建议设为false } } } } }
这里的关键是dataSources里的headers配置——所有通过这个模型发起的请求(包括XML视图绑定自动触发的GET请求),都会自动携带这个Authorization头,完全不需要手动写请求代码。
2. 在XML视图中直接绑定模型数据
配置好模型后,XML视图可以直接绑定数据,UI5会自动发起带授权头的请求拉取数据:
<mvc:View xmlns:mvc="sap.ui.core.mvc" xmlns="sap.m"> <!-- 直接绑定默认模型的Products实体集 --> <List items="{/Products}" busyIndicatorDelay="0"> <StandardListItem title="{ProductName}" description="{Category/CategoryName}" /> </List> </mvc:View>
3. 动态授权头的优化方案(几乎不用控制器代码)
如果你的Authorization令牌是动态获取的(比如从登录接口返回),虽然不能完全零控制器代码,但只需要在控制器的init方法里更新模型头即可,依然不用写显式的GET请求:
onInit: function() { // 获取配置好的默认模型 const oODataModel = this.getView().getModel(); // 假设你已经通过登录流程拿到了动态令牌(比如存在localStorage) const sDynamicToken = localStorage.getItem("userAccessToken"); // 更新模型的请求头 oODataModel.setHeaders({ "Authorization": `Bearer ${sDynamicToken}` }); }
这样后续视图绑定自动发起的所有请求,都会带上这个动态更新的授权头。
内容的提问来源于stack exchange,提问作者Nandan Chaturvedi
相关产品推荐
相关产品推荐

