Swift 将可编码对象发送到Alamofire
我有以下自定义类Swift 将可编码对象发送到Alamofire,swift,alamofire,Swift,Alamofire,我有以下自定义类 class FundingRequest: Codable { let dispatcherName, loadReference, origin, destination: String let pickedUp, droppedOff, driverFirstName, driverLastName: String let grossTruckPay, advancesTaken, fundingMethod, comments: String let additional
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
}
}
我需要能够将其发送到我的web服务,该服务希望它在名为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)
}
}
}
尝试以下代码:
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()
}
您的服务器是否接受格式为
[“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
}
您应该这样传递数据:让jsonEncoder=jsonEncoder()让jsonData=try jsonEncoder.encode(ratings)request.httpBody=jsonData我对这段代码有一些风格上的质疑,但它的基本方法似乎不错。你说“没用”是什么意思?对不起,我明白这没什么帮助。当我在postman中测试时,我能够让请求工作,我的问题是,当我构建请求时,我不知道它看起来像什么或者为什么出错,我只知道它在某个地方出错,因为它不像在postman中那样工作。您是否尝试在body中传递请求,如:request.httpBody=jsonData?JSONParameterEncoder.default