2017-09-01 123 views
0

我想重新創建這個郵遞員設置張貼在Alamofire。這是我第一次看到一個需要參數和一個Raw Json體的API。郵差身體原始請求快速Alamofire

對於上述要求,我已完成收集和格式化數據(使用SwiftyJSON的Json或詞典[String : Any]/Parameters)。

enter image description here

雖然我確實看到了類似的問題,這樣的:Postman request to Alamofire request但它並沒有一個有效的答案。假設我對從各種API發佈/獲取/ etc數據非常有經驗,但我不知道如何在上面的照片中傳遞原始數據。請在代碼中查看我的評論。

這裏就是我和我的功能做了這個請求:

/** Apply to job with Shift. 
* This service function creates a json data for applying. 
*/ 

func someFuncService(_ job: Job, daySchedules: [(Int, String, Schedule)], withBlock completion: @escaping JobServiceCommonCallBack) { 
    AuthService.someFunc { (currentCustomer, accessToken) in 
     guard let lalala = currentCustomer?.id, 
      let accessT = accessToken else { 
       completion(LalaErrors.currentCustomerError) 
       return 
     } 

     guard let jobId = job.id else { 
      completion(LalaErrors.modelError) 
      return 
     } 


     let coreService = LalaCoreService() 

     let applicantEndpoint = LalaCoreService.Endpoint.Applicant 

     let parameters = [ 
      "param1" : customerId, 
      "param2" : jobId, 
      "accessToken" : accessToken, 
      "shift" : self.generateDataFromDaySchedules(daySchedules) // this returns [String : Any], can be printed into Json using JSON(x) 
      ] as Parameters 

     GPLog(classSender: self, log: "FINAL PARAMETER: \(parameters)") 

     coreService.request = Alamofire.request(
      applicantEndpoint, 
      method: .post, 
      parameters: parameters, 
      encoding: URLEncoding.default, // I already have tried .httpbody too. 
      headers: nil 
     ) 

     coreService.request { 
      (response, result) in 

      if let error = result?.error { 
       if response!.statusCode == 500 { 
        completion(GPKitError.newError(description: "Failed to apply. Please contact the admin.")) 
        return 
       } 

       completion(error) 
       return 
      } 

      // Success 
      completion(nil) 
      return 
     } 
    } 
} 

編輯:所以現在的問題是,我在做什麼錯在這裏? API返回狀態碼500內部服務器錯誤。

+0

什麼是你的郵差設置了單頭?您在Alamofire請求中將標題設置爲「nil」。 –

+0

我郵遞員的郵件頭是'Content-Type'' application/x-www-form-urlencoded',這並不重要。試圖消除郵遞員和請求的作品。我的所有請求都不需要標題。 – Glenn

+1

如果使用該標題解決了問題,我仍然會在Alamofire中嘗試一下。將'encoding'設置爲'URLEncoding.httpBody'並使用指定的頭文件。順便說一句'參數'只是'[String:Any]'的一個類型? –

回答

1
coreService.request = Alamofire.request(
     applicantEndpoint, 
     method: .post, 
     parameters: parameters, 
     encoding: URLEncoding.default, // I already have tried .httpbody too. 
     headers: nil 
    ) 

應該

coreService.request = Alamofire.request(
      applicantEndpoint + accessToken, 
      method: .post, 
      parameters: parameters, 
      encoding: JSONEncoding.default, 
      headers: nil 
     ) 
+0

傻了,我一直在使用該JSONEncoding.default在我的所有請求中,我甚至沒有嘗試在這個特定的請求中使用它,因爲我認爲這不會起作用。謝謝! – Glenn