2017-10-10 29 views
2

即時得到一個錯誤,同時擊中使用Alamofire對象映射ObjectMapper未能響應序列錯誤代碼= 2

這是如何我打的API-

APIService.shared.getSlots{ (success,weekSlots, error) in 
    if success { 
    self.weekSlots = weekSlots! 
    print("success!!") 
    } else { 
    print(error?.errorMessage ?? "NOPE") 
    } 
} 

而getSlot函數內部Alamofire get請求APIService類是 -

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) 
        } 
    } 
} 

這是我的數據模型:

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>()) 
    } 
} 

我宣佈請求執行獲取請求,網址也是正確的。 API不接受由sessionManager處理的auth令牌以外的任何參數。但是,即時通過調試時得到以下錯誤 -

[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> 

這個錯誤是什麼意思?

從成功API響應是這個 -

{ 
    "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": {} 
} 

回答

0

我找到了解決辦法後第1天,問題是keyPath訪問「week_slots」,因爲我使用的是swiftyjson,訪問的正確方式是:

keyPath: "result.week_slots" 

因此,基本上每當你得到這個錯誤時,即使當響應是成功時,也是因爲你無法正確映射模型中的響應

0

嘗試改變模型類爲:

class WeekSlot: Object, Mappable { 
    dynamic var date : String? = "" 
    var slot: [Slots] = [] 

    //Impl. of Mappable protocol 
    required convenience init?(map: Map) { 
    self.init() 
    } 

    func mapping(map: Map) { 
    date <- map["date"] 
    slot <- map["slots"] 
    } 
} 

檢查您的插槽模型