Alamofire 网络请求报错 Alamofire.AFError.ResponseSerializationFailureReason.jsonSerializationFailed

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

2018年5月24补充:Invalid value around character 0 这个错误代表传入的第一个参数有误,要么参数拼错了,要么跟后台的要求对不上号。这次遇见的问题是header里的第一个字段"Content-type"对应的参数不对,修改后调通了。


第一次用Alamofire写Swift项目,写好的网络请求报了如上的错误,看意思是说JSON序列化失败,在服务端查看了一下请求日志,没发现什么问题。于是就把目光转移到网络参数上,请求代码如下:

Alamofire.request(urlString, method: .get, parameters: param, encoding: URLEncoding.default, headers: configHeaders()).responseJSON { (response) in
            print("\(response)")
            //response是我们自定义的,这个变量用于接收服务器响应的信息
            //使用switch判断请求是否成功,也就是response的result
            switch response.result {
            case .success( _):
                //当响应成功时,使用临时变量value接收服务器返回的信息并判断是否为[String: AnyObject]类型,如果是那么将其传给定义方法中的success
                if let value = response.result.value as? [String: AnyObject] {
                    success(value)
                }
            case .failure(let error):
                failture(error)
                print("error:\(error)")
            }
        }

其中,设置请求头函数如下:

//FIXME:配置header,可以自定义
    func configHeaders() -> HTTPHeaders {
        
        var headers:HTTPHeaders = ["Content-type":"application/json;charset=utf-8",
                                   "Accept":"application/json",
                                   "systemtype":"ios",
                                   "channel":"00",
                                   "Authorization":""]
        
        headers["auid"] = auid
        headers["appcode"] = getAppVersion()
        headers["systemversion"] = getSystemVersion()
        headers["deviceid"] = getDeviceId()
        headers["devicemodel"] = UIDevice.current.modelName
        headers["timestamp"] = getNowTimeStamp()
        headers["validtime"] = "600"
        
        return headers
    }
为了找到问题,首先用排除法,找一个不需要请求头的数据的接口,传入阐述,调用如下方法看是否能得到数据:

Alamofire.request(urlString, method: .post, parameters: param).responseJSON  { (response) in 
            print(response)
        }
调用之后能得到想要的数据,此时可以定位到问题出在请求头headers参数上,查看接口文档发现Content-type有两种形式,其中http请求时对应value是
application/json;charset=utf-8,https请求时对应application/x-www-form-urlencoded,于是在此进行修改,后发现问题得到解决。

报此错误的另一种原因是,服务器数据格式传输有误。




  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值