Alamofire响应序列化失败

时间:2018-08-17 09:43:13

标签: swift alamofire

我正在使用Alamofire在我的快捷应用中发出请求。我的所有请求在2天前都在工作,现在只有其中一部分在工作。我的API正常运行,我使用Postman并在Android版本的应用中获得了正确的响应。

这是请求代码

let headers: HTTPHeaders = [
            "Authorization": "\(token)",
            "Accept": "application/json"
        ]

Alamofire.request(url, method: .get, parameters: nil, encoding: URLEncoding.default, headers: headers).responseJSON(completionHandler: { (response) in
            deactivateActivityIndicator()

            if let json = response.result.value {
                log.debug("User json: \(json)")
                let user = Mapper<User>().map(JSON: JSON(json).dictionaryObject!)
                self.delegate?.getRequestSuccessful(user!)
            }
            else{
                self.delegate?.requestError("Error occurred getting response from API")
            }
        })

我从API请求的JSON如下所示:

{
    "id": "1",
    "email": "test@test.com",
    "first_name": "Test",
    "last_name": "Tester",
    "role": 1,
    "verified": true,
    "edited": "2018-08-14T11:52:31.900Z",
    "created": "2018-08-14T08:02:59.251Z"
}

我不断收到401响应,如下所示:

  

responseSerializationFailed(Alamofire.AFError.ResponseSerializationFailureReason.jsonSerializationFailed(Error   Domain = NSCocoaErrorDomain代码= 3840“字符周围的值无效   0。“ UserInfo = {NSDebugDescription =字符0周围的值无效。}))

我曾尝试将responseJSON更改为responseString,就像在问题here中一样,但是并没有解决问题

2 个答案:

答案 0 :(得分:0)

请尝试使用JSONEncoding.default。替换现有代码中的URLEncoding.default

答案 1 :(得分:0)

经过几天的搜索和调试,我设法解决了该问题。输入Alamofire请求的URL时,我使用的是$scope格式的URL。我在末尾添加了一个额外的斜杠,如下所示:https:///www.test.com

根据我发现的内容,请求将被重定向到正确的URL,并且标头未随请求一起发送。因此解释了401响应(Unauahtorized)