我正在尝试在Hybrid Worklight应用程序中注册用户。为此我使用外部REST API。 API说:
- 请求方法:POST
- 请求网址:https:// $ {domainservice} / service / plan / $ {planName} / user?key = $ {key}& tenantId = $ {tenantId}
- 请求标题:Content-Type:application / json
请求有效负载:
{ “uid”:“patricia”, “firstName”:“Patricia”, “lastName”:“Mayo”, “pic”:“BASE64_ENCODED_IMAGE” }
字段说明:
- uid(必填):用户的uid
- firstName(可选):用户的名字
- lastName(可选):用户的姓氏
- pic(可选):用户的图片编码为base64 string
所以我创建了一个HTTP Worklight适配器:
function RegisterUser(userid) {
var input = {
method : 'post',
path : '/service/plan/App/user',
returnedContentType : 'plain',
headers: {'Content-Type' : 'application/json'},
parameters: {
'key':'e634bc60-0c6eba577258',
'tenantId': 'd93b921d-a56c-a645924fd548'
},
body : {
'contentType' : 'application/json',
'content' : JSON.stringify({
"uid" : userid})
}
};
return WL.Server.invokeHttp(input);
}
我收到了这个错误:
{ "errors": [
],
"info": [
],
"isSuccessful": true,
"responseHeaders": {
"$wsep": "",
"Connection": "Keep-Alive",
"Content-Language": "en-US",
"Content-Type": "text\/html;charset=ISO-8859-1",
"Date": "Wed, 30 Jul 2014 14:47:27 GMT",
"Transfer-Encoding": "chunked",
"X-Backside-Transport": "FAIL FAIL",
"X-Client-IP": "199.127.32.67",
"X-Global-Transaction-ID": "48515650",
"X-Powered-By": "Servlet\/3.0"
},
"responseTime": 357,
"statusCode": 500,
"statusReason": "Internal Server Error",
我觉得设置
非常奇怪标题:{'Content-Type':'application / json'}
但在回复中看起来像是
“Content-Type”:“text / html; charset = ISO-8859-1”
此外,我想指出一些我已经尝试过的事情:
returnedContentType:'plain' - >它被设置为plain,因为如果我将它设置为json我会得到一个JSON解析错误
身体内容我也试过
var payload = "{\'uid\': \'"+userid+"\'}";
payload = payload.toString();
然后'content' : payload
使用浏览器的RESTClient一切正常
我尝试使用http端口80,http端口2080,以及https 443
我也尝试在标题中写入主机
答案 0 :(得分:0)
在服务器遇到错误情况的情况下,我不会太担心有效负载的格式 - 理想情况下,服务器会给我们很好的错误响应,但这并不总是可行的。通常情况下,如果成功的情况下预期的响应类型是JSON,那么这就是我指定的内容,而且我只需要对JSON解析失败时的情况进行足够的错误处理。
至于为什么你得到500错误...我可以建议最好使用某种网络监视器来辨别通过Worklight发出的请求和浏览器的REST客户端发出的请求之间的区别。
您可以在Eclipse,Preferences-> Run-> TCP / IP Monitor ...
中进行设置。答案 1 :(得分:0)
您可能想要添加主机标头。我曾多次见过解决类似问题的地方。例如。如果您尝试连接到http://www.server.com/a/b/c/d,请将以下标题添加到标题属性
headers: {
Host: 'www.server.com'
}
答案 2 :(得分:0)
我终于找到了错误。 Worklight中存在缺陷,查询参数被删除并放入请求主体中,因此REST服务不会收到密钥和密钥。 tenantId。这是最终的工作代码解决方案。无论如何,谢谢您的快速回答:)
function RegisterUser(userid) {
var payload = '{"uid": \"'+userid+'\"}';
var input = {
method : 'post',
path : '/service/plan/App/user?key=e630-db87-4803-bc45-57725c&tenantId=d9348af-a56c-a645924fd54e',
returnedContentType : 'application/json',
headers: {'Content-Type' : 'application/json'},
body : {
'contentType' : 'application/json',
'content' : payload.toString()
}
};
return WL.Server.invokeHttp(input);
}