【问题标题】:POST Adapter HTTP Worklight 6 500 Server ErrorPOST 适配器 HTTP Worklight 6 500 服务器错误
【发布时间】:2014-09-22 07:14:10
【问题描述】:

我正在尝试在我的 Hybrid Worklight 应用程序中注册用户。为此,我使用了外部 REST API。 API 说:

  • 请求方法:POST
  • 请求网址:https://${domainservice}/service/plan/${planName}/user?key=${key}&tenantId=${tenantId}
  • 请求标头:Content-Type:application/json
  • 请求负载:

    { “uid”:“帕特里夏”, "firstName": "帕特里夏", "lastName": "梅奥", “图片”:“BASE64_ENCODED_IMAGE” }

字段说明:

  • uid(必填):用户的uid
  • firstName(可选):用户的名字
  • lastName(可选):用户的姓氏
  • pic(可选):用户图片编码为base64字符串

所以我创建了一个 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'}

但在响应中看起来像

“内容类型”:“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

  • 我也尝试在标题中写入主机

【问题讨论】:

    标签: json rest ibm-mobilefirst worklight-adapters


    【解决方案1】:

    在服务器遇到错误条件的情况下,我不会太担心有效负载的格式 - 理想情况下,服务器会为我们提供格式良好的错误响应,但这并不总是可能的。通常,如果成功时预期的响应类型是 JSON,那么这就是我指定的类型,我只需要对 JSON 解析失败的情况进行足够的错误处理。

    至于为什么您会收到 500 错误...我最好的建议是使用某种网络监视器来辨别通过 Worklight 发出的请求与浏览器的 REST 客户端发出的请求之间的区别。

    你可以在 Eclipse 中设置,Preferences->Run->TCP/IP Monitor ...

    【讨论】:

      【解决方案2】:

      您可能想要添加一个 Host 标头。我已经多次看到它解决了类似的问题。例如。如果您尝试连接到http://www.server.com/a/b/c/d,请将以下标题添加到您的 headers 属性中

      headers: {
          Host: 'www.server.com'
      }
      

      【讨论】:

        【解决方案3】:

        我终于找到了错误。 Worklight 中存在缺陷,查询参数被删除并放入请求正文中,因此 REST SERVICE 没有收到 key 和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);
        }
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2015-10-25
          • 1970-01-01
          • 2023-02-20
          • 2016-09-15
          • 2017-08-17
          • 1970-01-01
          • 2016-03-29
          • 1970-01-01
          相关资源
          最近更新 更多