序列化使用 Alamofire 发布数据时出现失败错误



我正在尝试使用Alamofire将一些文本数据和图像保存到服务器,但是我收到以下错误:

FAILURE: responseSerializationFailed(Alamofire.AFError.ResponseSerializationFailureReason.jsonSerializationFailed(Error Domain=NSCocoaErrorDomain Code=3840 "字符 0 周围的值无效。"用户信息={NSDebugDescription=字符 0 周围的值无效。

我的代码:

internal func postContent(forApi Name:String, image:UIImage?, withData payload:[String: String], success: ((_ response:[String: AnyObject])->Void)?, failure: ((Error)->Void)?) {
    //create Alamofire request
    //if everything was fine call success block with people array passed into it
    //if failure occurred, call failure block with error.
    if(isConnectedToNetwork()){
        let url = SharedConstants.baseURL+Name
        print("url "+SharedConstants.baseURL+Name)
        Alamofire.upload(multipartFormData: { (multipartFormData) in
            if let img = image {
                multipartFormData.append(UIImageJPEGRepresentation(img, 0.5)!, withName: "photo_path", fileName: "swift_file.jpeg", mimeType: "image/jpeg")
            }
            for (key, value) in payload {
                multipartFormData.append(value.data(using: .utf8)!, withName: key)
            }
        }, to: url, method: .post , headers:nil, encodingCompletion: { (result) in
            switch result {
            case .success(let upload, _, _):
                upload.responseJSON(completionHandler: { (response) in
                    print(response.request)  // original URL request
                    print(response.response) // URL response
                    print(response.data)     // server data
                    print(response.result)   // result of response serialization
                    if let JSON = response.result.value {
                        print(JSON)
                        success!(JSON as! [String: AnyObject])
                    }
                    else{
                        failure!(ErrorType.noRecordFound)
                    }
                })
            case .failure(let error):
                print(error)
            }
        })
    }
    else{
        failure!(ErrorType.internetNotWorking)
    }
}

提前致谢

iOS 代码

正确,后端代码有问题。JSON 格式不正确。我纠正了后端的 json 形成,它开始正常工作。

let headers:HTTPHeaders = ["Authorization": "Bearer " + token2Save]
let moreheaders:Parameters = ["Dropbox-API-Arg": ["path":sourcePath]]
Alamofire.request("https://content.dropboxapi.com/2/files/download", parameters: moreheaders, encoding: URLEncoding(destination: .queryString), headers: headers).responseJSON { feedback in
        guard feedback.result.value != nil else {
            print("Error: did not receive data", print("request (request) feedback (feedback)"))
            return

URLEncoding(destination: .queryString), headers: headers).responseJSON

Replace responseJSON with responseString and check your response  from webservice.. it will lead to get the error line.

指:

https://stackoverflow.com/a/43041931/5215474

将 responseJSON 替换为 responseString,并检查您的响应来自 网络服务..这将导致获得错误线。

前端发送参数:

 {
"delivery_method": [{
    "vehicle_type": "walk",
    "vehicle_id": "1",
    "vehicle_color": "",
    "vehicle_brand": "",
    "vehicle_image": "",
    "vehicle_number": "",
    "mode_type": "1",
    "vehicle_model": ""
}, {
    "vehicle_type": "scooter",
    "vehicle_id": "4",
    "vehicle_color": "",
    "vehicle_brand": "",
    "vehicle_image": "",
    "vehicle_number": "",
    "mode_type": "1",
    "vehicle_model": ""
}]
}

当我像这样解析 JSON 时JSON.parse(params[:delivery_method])抛出错误。因此,我们可以为 json 创建一个参数。

data=JSON.parse(params[:delivery_method].to_json) # no exception.

检查 url 中的路径可能是您缺少某个文件夹。

最新更新