Alamofire, печатающий JSON, не может быть сериализован из-за ошибки:

Я пытаюсь сделать почтовый запрос с некоторыми параметрами, но при выполнении запроса Alamofire выводит следующую ошибку:

JSON не может быть сериализован из-за ошибки: данные не могут быть прочитаны, так как они имеют неверный формат.

Ниже приведен мой код, который я пытаюсь запустить:

var parameters: [String: Any] = [:]
parameters[UserParameters.kUserId.rawValue] = self.userInfoForMe.user_id
parameters[UserParameters.kGender.rawValue] = self.userInfoForMe.gender
parameters[UserParameters.kfull_name.rawValue] = self.userInfoForMe.full_name
parameters[UserParameters.kDOB.rawValue] = self.userInfoForMe.dob  

print("parameters:\(parameters)")
let userInfoDataHandler:UserInfoDataHandler = UserInfoDataHandler()
var DataJSON : JSON = JSON.null
userInfoDataHandler.postData(parameters: parameters){
    responseObject, error in
    if responseObject != nil{
        DataJSON = JSON(responseObject!)
       print(DataJSON) 
    }
    else{
        self.removeLoader(showNewController: false)
        self.showAlertWithMessage(msg: ErrorContants.somethingWentWrongError)
    }
}

вот мой UserDataInfoHandler:

class UserInfoDataHandler: BaseService {
init(){
    super.init(controller: Controllers.mobile_pa, apiName: ApiNames.save_user_info)
}

}

и ниже приведен мой код, для которого вызывается базовая служба:

fileprivate func fetchData(method:String, endpoint:String,parameters: [String: Any],completionHandler: @escaping (NSDictionary?, Error?) -> ()){

    //need to show loader here..

    var request: DataRequest? = nil
    let requestURL : String = URLConstants.baseURL + self.controller + "/" + self.apiName
    switch method {
    case RequestMethod.GET.rawValue:
        request = Alamofire.request(requestURL, method: HTTPMethod.get, parameters: parameters)

    case RequestMethod.POST.rawValue:
        request = Alamofire.request(requestURL, method: HTTPMethod.post, parameters: parameters)

    default:
        print(ErrorContants.WentThroughSwitchCaseOf + "Base Service");
    }

    request?.responseJSON(completionHandler: { (response) in
//this block never gets executed as it throws error that JSON is not serialized.
            self.checkForResponseAndError(response: response, completionHandler: completionHandler)
        })
}

После печати моих параметров выводится следующее:

parameters:[ "full_name": "fatin", "user_id": "42", "dob": "06-12-1994", "gender": "1"]

Обновление: я пробовал работать с другим почтовым запросом и параметрами с тем же кодом, они работают нормально. Итак, я узнал, что это проблема с моими параметрами, которые я отправляю, но до сих пор не могу понять, что происходит не так.


person Fatin Wasta    schedule 01.12.2017    source источник
comment
@Krunal, спасибо за ответ, обновили код, проверьте, достаточно ли этого.   -  person Fatin Wasta    schedule 01.12.2017


Ответы (2)


После нескольких часов размышлений и обсуждений с моей командой выяснилось, что в моем коде нет ошибок. Проблема заключалась в том, что на стороне сервера были некоторые проверки, из-за которых в ответ появлялась ошибка PHP, которую alamofire не может обработать (Поскольку alamofire может обрабатывать только ответ JSON). Пожалуйста, найдите прикрепленный скриншот ошибки в Postman.введите описание изображения здесь Таким образом, фактическая проблема была с ответом сервера, который был ошибкой PHP в почтовом запросе. Теперь я получаю правильный ответ, так как сейчас нет проблемы. Надеюсь, кто-то найдет это полезным.

person Fatin Wasta    schedule 02.12.2017

Вместо responseJSON используйте responseString. Меня устраивает.

responseString(completionHandler: { (response) in
     //this block never gets executed as it throws error that JSON is not serialized.
     self.checkForResponseAndError(response: response, completionHandler: completionHandler)
})
person ARUN R MANI    schedule 15.04.2020