[英]XML or JSON in SAPUI5 POST-request?
我正在尝试通过OData-Rest-API将数据发布到SAP后端系统。 在线上有一些关于如何执行此操作的教程,这些教程还提供了代码示例。 令我困惑的是请求标头中“ Content-Type”的规范与实际提供请求数据的数据格式之间的关系。 一个代码示例来自此站点 :
OData.request({
requestUri: "http://gwserver:8000/sap/opu/odata/sap/Z_UI5_USER_MAINT_CM/z_ui5_user_maintCollection",
method: "POST",
headers: {
"X-Requested-With": "XMLHttpRequest",
"Content-Type": "application/atom+xml",
"DataServiceVersion": "2.0",
"Accept": "application/atom+xml,application/atomsvc+xml,application/xml",
"X-CSRF-Token": header_xcsrf_token
},
data:{
username: username_var,
title:title_var,
title_p:title_var,
firstname: firstname_var,
lastname: lastname_var,
password: password_var,
department: department_var,
language: language_var,
telephone: telephone_var,
e_mail: email_var,
city: city_var,
country: country_var,
comm_type:"",
fullname:"",
userid:"",
name:"",
islocked:"",
region: ""
}},
现在,此请求中“数据”的格式到底是什么? 它看起来不像XML。 这引出了我的下一个问题,即如何格式化POST请求的数据。 这是我的Web应用程序的controller.js文件中的代码:
OData.request({
requestUri: "proxy/http/XXXXXXXXX/sap/opu/odata/XXXXXXXXX",
method: "POST",
headers: {
"X-Requested-With": "XMLHttpRequest",
"Content-Type": "application/atom+xml",
"DataServiceVersion": "2.0",
"MaxDataServiceVersion": "2.0",
"Pragma": "no-cache",
"Cache-Control": "no-store, no-cache",
"Accept": "application/atom+xml,application/atomsvc+xml,application/xml",
"X-CSRF-Token": "XXXXXXXXXXXXXX"
},
data: reqData
},
function(data, response){
alert('Done POSTing.');
},
function(err){
console.log(err);
});
我从与DHC REST客户端进行的GET请求中获得了有效的X-CSRF-Token。 通过DHC发布到SAP系统可以正常工作。 我应该在reqData变量中存储什么数据格式? 我尝试将原始XML的字符串分配给reqData,但它返回错误消息no handler for data
。 我的收藏集的一项的XML数据的结构如下:
<content type="application/xml">
<m:properties>
<d:Name m:type="PatientService.PersonName">
<d:Family>Test10</d:Family>
<d:First>Test10</d:First>
<d:Prefix/>
<d:Title/>
<d:Affix/>
</d:Name>
<d:Gender>Female</d:Gender>
<d:BirthDate m:null="true"/>
<d:isActive>false</d:isActive>
<d:NationalityISO>DE</d:NationalityISO>
<d:BirthCountryISO>DE</d:BirthCountryISO>
<d:BirthPlace>Hintertupfing</d:BirthPlace>
<d:BirthName/>
</m:properties>
</content>
我已经尝试了五种不同的XML到JSON转换器来转换XML内容,它不断抛出诸如
DOMException: Failed to execute 'createElementNS' on 'Document': The qualified name provided ('d:_m:type') contains multiple colons.(…)
并将我的数据存储在这样的对象中:
{
Family: "Test10",
First: "Anna10",
Nationality: "DE",
BirthCountry: "DE",
BirthPlace: "Hintertupfing"
}
也不起作用。
你为什么写你的请求手册?
//insert request
var oDataJSON = {
"Name": {"Family": "Schultz", "First": "Mandy"},
"Gender": "Female",
"isActive": true
}
oDataModel.insert(oDataJSON);
//merge request
oDataJSON = {
"Name": {"Family": "Schultz", "First": "Mandy"},
"isActive", false
};
oDataModel.update(oDataJSON);
现在,您可以使用Chrome开发者工具分析POST请求
我的格式正确。 有效负载中的嵌套XML结构是通过将数据嵌套在请求规范中来实现的,如下所示:
data: {
Name: {Family: "Schultz", First: "Mandy"}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.