【问题标题】:Swift - Alamofire "Invalid value around character 0."Swift - Alamofire “字符 0 周围的值无效。”
【发布时间】:2017-09-05 09:31:20
【问题描述】:

我发现一些线程有同样的问题,但他们的答案对我不起作用。

我有一个post 请求检查用户登录。

网址形式:

http://support.xxx.xx:8031/serpapi/login/checkLogin

参数:

["contextInfo" : 
      ["clientId": "1000000", "orgId": "1000001",
      "warehouseId": "1000002", "roleId": "0"],
      "userName": "hanoiaUser", "password": "hanoiaUser"]

请求:

Alamofire.request(url!, method: .post, parameters: params).responseJSON { (response) in
        print(response)
    }

错误响应:

FAILURE: responseSerializationFailed(Alamofire.AFError.ResponseSerializationFailureReason.jsonSerializationFailed(Error Domain=NSCocoaErrorDomain Code=3840 "Invalid value around character 0." UserInfo={NSDebugDescription=Invalid value around character 0.}))

为什么会出现这个错误?以及如何解决?

编辑:我尝试使用 POSTMAN 并返回响应:

内容类型:应用程序/json

正文:原始 - json

{

    "contextInfo" : {
       "clientId":1000000,
       "orgId": 1000001,
       "warehouseId": 1000002,
       "roleId": 0
    },
   "userName": "hanoiaUser",
   "password": "hanoiaUser"
}

回应:

 {
        "success": true,
        "data": [
            {
                "userId": 1000003,
                "userName": "hanoiaUser",
                "token": "b7e804d25065e5c3ac97d765180b7986"
            }
        ],
        "error": null
    }

【问题讨论】:

  • 你的服务器可能有问题
  • 显然响应不是 JSON 有效的。你能改用responseString 给我们看那个字符串吗?
  • 我试过了,但它返回另一个错误:“错误 415 不支持的媒体类型”
  • 首先修复您的 Postman 请求,如果没有有效的请求,没有人可以帮助您找出您的 Swift 代码出了什么问题。
  • @TungVuDuc 错误 415 另一方面意味着响应类型与您的 Content-Type 标头描述的不同。例如,当您期望 JSON 响应并接收 XML 响应时,就会发生这种情况。如果您设法使您的 Postman 请求正常工作,请在您的问题中包含 Postman 请求。

标签: swift alamofire


【解决方案1】:

好的,我终于解决了问题

这是新的请求:

Alamofire.request(url!, method: .post,encoding : JSONEncoding.default, headers: headers, parameters: params).responseJSON { (response) in
    print(response)
}

带有标题:

  let headers = [
        "Content-Type": "application/json"
    ]

【讨论】:

  • 谢谢,你拯救了我的一天。我知道问题出在标题中,但是我尝试了有关标题的任何解决方案但没有奏效。在 validate() 中添加内容类型,返回 responseString 和您的解决方案,在 alamofire 请求中设置标头。这是工作
【解决方案2】:

像这样设置请求头:

request.allHTTPHeaderFields = ["Content-Type":"application/json"]

【讨论】:

    猜你喜欢
    • 2015-11-28
    • 2018-12-07
    • 1970-01-01
    • 1970-01-01
    • 2014-09-08
    • 1970-01-01
    • 2018-02-20
    • 1970-01-01
    • 2016-09-19
    相关资源
    最近更新 更多