Отправить кодируемый объект для Alamofire - PullRequest
0 голосов
/ 14 марта 2019

У меня есть следующий пользовательский класс.

class FundingRequest: Codable {
let dispatcherName, loadReference, origin, destination: String
let pickedUp, droppedOff, driverFirstName, driverLastName: String
let grossTruckPay, advancesTaken, fundingMethod, comments: String
let additionalCharges, rateConfirmation, billOfLading, lumperReceipt: [String]
let salesTicket: [String]

enum CodingKeys: String, CodingKey {
    case dispatcherName = "DispatcherName"
    case loadReference = "LoadReference"
    case origin = "Origin"
    case destination = "Destination"
    case pickedUp = "PickedUp"
    case droppedOff = "DroppedOff"
    case driverFirstName = "DriverFirstName"
    case driverLastName = "DriverLastName"
    case grossTruckPay = "GrossTruckPay"
    case advancesTaken = "AdvancesTaken"
    case fundingMethod = "FundingMethod"
    case comments = "Comments"
    case additionalCharges = "AdditionalCharges"
    case rateConfirmation = "RateConfirmation"
    case billOfLading = "BillOfLading"
    case lumperReceipt = "LumperReceipt"
    case salesTicket = "SalesTicket"
}

init(dispatcherName: String, loadReference: String, origin: String, destination: String, pickedUp: String, droppedOff: String, driverFirstName: String, driverLastName: String, grossTruckPay: String, advancesTaken: String, fundingMethod: String, comments: String, additionalCharges: [String], rateConfirmation: [String], billOfLading: [String], lumperReceipt: [String], salesTicket: [String]) {
    self.dispatcherName = dispatcherName
    self.loadReference = loadReference
    self.origin = origin
    self.destination = destination
    self.pickedUp = pickedUp
    self.droppedOff = droppedOff
    self.driverFirstName = driverFirstName
    self.driverLastName = driverLastName
    self.grossTruckPay = grossTruckPay
    self.advancesTaken = advancesTaken
    self.fundingMethod = fundingMethod
    self.comments = comments
    self.additionalCharges = additionalCharges
    self.rateConfirmation = rateConfirmation
    self.billOfLading = billOfLading
    self.lumperReceipt = lumperReceipt
    self.salesTicket = salesTicket
}

}

Мне нужно иметь возможность отправить это моему веб-сервису, который ожидает его как JSON в параметре с именем JSON.Также необходимо передать секретный код под названием «код» вместе с этим.Не уверен, как добиться этого с помощью alamofire.

Это то, что я пробовал до сих пор, но это не сработало, я не делаю это правильно вообще.

r fundingReqeust = FundingRequest(dispatcherName: txtDispatcherName.text!, loadReference: txtLoadReference.text!, origin: txtOrigin.text!, destination: txtDestination.text!, pickedUp: txtPickedUp.text!, droppedOff: txtDroppedOff.text!, driverFirstName: txtDriverFirstName.text!, driverLastName: txtDriverLastName.text!, grossTruckPay: txtGrossTruckPay.text!, advancesTaken: "0", fundingMethod: "1", comments: txtComments.text!, additionalCharges: additionalChargesString, rateConfirmation: rateConfirmationsURL, billOfLading: billOfLadingsURL, lumperReceipt: lumperReceiptsURL, salesTicket: SaleTicketURL)
        let jsonEncoder = JSONEncoder()
        let jsonData = try? jsonEncoder.encode(fundingReqeust)
        let json:String = String(data: jsonData!, encoding: String.Encoding.utf8)! // the data will be converted to the string
        let urlString = "https://xxx.xxx.com"
        let parameters: Parameters = ["code": "xxx", "JSON": json]

        Alamofire.request(urlString, method: .post, parameters: parameters,encoding: JSONEncoding.default, headers: nil).responseJSON {
            response in
            switch response.result {
            case .success:
                print(response)

                break
            case .failure(let error):

                print(error)
            }
        }

    }

Ответы [ 2 ]

0 голосов
/ 14 марта 2019

Принимает ли ваш сервер данные в формате ["code": "xxx", "JSON": json]? Я не уверен в этом, но я думаю, что это похоже на ["code": "xxx", "key1": "val1", "key2" : "val2"]

Попробуйте с:

    let jsonEncoder = JSONEncoder()
    var jsonData = try? jsonEncoder.encode(fundingReqeust) as? [String: Any]
    jsonData?["code"] = "xxx"
    let urlString = "https://xxx.xxx.com"

    Alamofire.request(urlString, method: .post, parameters: jsonData, encoding: JSONEncoding.default, headers: nil).responseJSON {
        response in

    }
0 голосов
/ 14 марта 2019

Попробуйте следующий код:

func postRatingReviewDetail(ratings:RatingFeedbackModal, completion:@escaping RatingFeedbackCompletionHandler){

    let urlString = WEBAPI.rating
    guard let url = URL(string: urlString) else { return }
    let request = NSMutableURLRequest(url: url)
    let authString = "Bearer " + TTUserDefalut.getAccessToken()!
    let session = URLSession.shared
    request.httpMethod = "POST"
    request.addValue("application/json", forHTTPHeaderField: "Content-Type")
    request.addValue("application/json", forHTTPHeaderField: "Accept")
    request.addValue(authString, forHTTPHeaderField: "Authorization")
    do {
        **let jsonEncoder = JSONEncoder()
        let jsonData = try jsonEncoder.encode(ratings)
        request.httpBody = jsonData**
    }
    catch let error{
        print("Error", error)
        return
    }
    let _ = session.dataTask(with: request as URLRequest) { data, response, error in
        guard let data = data else { return }
        do {
            let responseData = try JSONDecoder().decode(RatingResponse.self, from: data)
            completion(responseData,response,error)
        }
        catch{
             completion(nil,nil,nil)
        }

        }.resume()
}
...