Swift - Alamofire “字符 0 周围的值无效。”

Posted

技术标签:

【中文标题】Swift - Alamofire “字符 0 周围的值无效。”【英文标题】:Swift - Alamofire "Invalid value around character 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 请求。 【参考方案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"]

【讨论】:

以上是关于Swift - Alamofire “字符 0 周围的值无效。”的主要内容,如果未能解决你的问题,请参考以下文章

Alamofire 在 Swift 3、Xcode 8 中出现错误

swift Alamofire+ObjectMapper——swift(学习九)

Swift:Alamofire 文档

导入 Alamofire.swift 不起作用

Alamofire 奇怪的 JSON 前缀 - Swift 2.0

Swift - Alamofire - 解析 JSON