Im getting an error while hitting Alamofire get request using Alamofire Object mapper
this is how i'm hitting the API-
APIService.shared.getSlots{ (success,weekSlots, error) in
if success {
self.weekSlots = weekSlots!
print("success!!")
} else {
print(error?.errorMessage ?? "NOPE")
}
}
while getSlot function inside APIService class is-
open func getSlots(completion: @escaping (Bool, [WeekSlot]?, APIError?) -> ()) {
sessionManager.request(APIRouter.getSlots())
.validate(statusCode: 200..<300)
.responseArray(queue: nil,
keyPath: "week_slots",
context: nil) { (response: DataResponse<[WeekSlot]>) in
switch response.result {
case .success(let value):
self.saveArraysToRealm(value: value)
completion(true,value, nil)
case .failure:
let error = self.processFailure(json: JSON(response.data as Any))
completion(false, nil, error)
print(error)
}
}
}
this is my Data model :
import Foundation
import ObjectMapper
import RealmSwift
class WeekSlot: Object, Mappable {
dynamic var date : String? = ""
var slot = List<Slots>()
//Impl. of Mappable protocol
required convenience init?(map: Map) {
self.init()
}
func mapping(map: Map) {
date <- map["date"]
slot <- (map["slots"], ArrayTransform<Slots>())
}
}
Ive declared the request to perform get request and the url is also correct. The API does not accept any parameters except auth token which is handled by sessionManager. However, im getting the following error in response while debugging-
[Request]: GET http://beta.xamidea.in/api/v1/teachers/get_slots/
[Response]: <NSHTTPURLResponse: 0x600000434c80> { URL: http://beta.xamidea.in/api/v1/teachers/get_slots/ } { status code: 200, headers {
Allow = "GET, POST, HEAD, OPTIONS";
Connection = "keep-alive";
"Content-Length" = 477;
"Content-Type" = "application/json";
Date = "Tue, 10 Oct 2017 11:01:53 GMT";
Server = "nginx/1.10.3 (Ubuntu)";
Vary = Accept;
"X-Frame-Options" = SAMEORIGIN;
} }
[Data]: 477 bytes
[Result]: FAILURE: Error Domain=com.alamofireobjectmapper.error Code=2 "ObjectMapper failed to serialize response." UserInfo=. {NSLocalizedFailureReason=ObjectMapper failed to serialize response.}
[Timeline]: Timeline: { "Request Start Time": 529326113.851, "Initial Response Time": 529326113.985, "Request Completed Time": 529326113.986, "Serialization Completed Time": 529326113.987, "Latency": 0.134 secs, "Request Duration": 0.135 secs, "Serialization Duration": 0.001 secs, "Total Duration": 0.136 secs }
▿ request : Optional<URLRequest>
▿ some : http://beta.xamidea.in/api/v1/teachers/get_slots/
▿ url : Optional<URL>
▿ some : http://beta.xamidea.in/api/v1/teachers/get_slots/
- cachePolicy : 0
- timeoutInterval : 60.0
- mainDocumentURL : nil
- networkServiceType : __ObjC.NSURLRequest.NetworkServiceType
- allowsCellularAccess : true
▿ httpMethod : Optional<String>
- some : "GET"
▿ allHTTPHeaderFields : Optional<Dictionary<String, String>>
▿ some : 1 element
▿ 0 : 2 elements
- key : "Authorization"
- value : "Token 4d7ebe501bcd7c910cf1950ab53bc8aa2a4a569d"
- httpBody : nil
- httpBodyStream : nil
- httpShouldHandleCookies : true
- httpShouldUsePipelining : false
▿ response : Optional<NSHTTPURLResponse>
▿ data : Optional<Data>
▿ some : 477 bytes
- count : 477
▿ pointer : 0x00007f896a48aa80
- pointerValue : 140228170394240
▿ result : FAILURE: Error Domain=com.alamofireobjectmapper.error Code=2 "ObjectMapper failed to serialize response." UserInfo= {NSLocalizedFailureReason=ObjectMapper failed to serialize response.}
▿ timeline : Timeline: { "Request Start Time": 529326113.851, "Initial Response Time": 529326113.985, "Request Completed Time": 529326113.986, "Serialization Completed Time": 529326113.987, "Latency": 0.134 secs, "Request Duration": 0.135 secs, "Serialization Duration": 0.001 secs, "Total Duration": 0.136 secs }
- requestStartTime : 529326113.85062999
- initialResponseTime : 529326113.98505801
- requestCompletedTime : 529326113.98612601
- serializationCompletedTime : 529326113.986781
- latency : 0.13442802429199219
- requestDuration : 0.13549602031707764
- serializationDuration : 0.00065499544143676758
- totalDuration : 0.1361510157585144
▿ _metrics : Optional<AnyObject>
What does this error means??
the response from API on success is this-
{
"result": {
"week_slots": [
{
"date": "2017-10-10",
"slots": []
},
{
"date": "2017-10-11",
"slots": [
{
"start": "2017-10-11T20:00:00Z",
"end": "2017-10-11T21:00:00Z",
"availability": true,
"booked": false
},
{
"start": "2017-10-11T10:00:00Z",
"end": "2017-10-11T12:00:00Z",
"availability": true,
"booked": false
}
]
},
{
"date": "2017-10-12",
"slots": []
},
{
"date": "2017-10-13",
"slots": []
},
{
"date": "2017-10-14",
"slots": []
},
{
"date": "2017-10-15",
"slots": []
},
{
"date": "2017-10-16",
"slots": []
}
]
},
"success": true,
"error": {}
}
I found the solution after 1 day, the problem was in keyPath to access "week_slots" , since I was using swiftyjson the correct way to accesss was:
keyPath: "result.week_slots"
So basically whenever you get this error even when the responce from is is success, its because you are unable to map the response in your model correctly
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With