Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

ObjectMapper failed to serialize response error Code=2

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": {}
}
like image 998
Romit Kumar Avatar asked Nov 07 '22 15:11

Romit Kumar


1 Answers

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

like image 155
Romit Kumar Avatar answered Nov 14 '22 23:11

Romit Kumar