当做Post请求时,如果后端让传值是json类型时,
请求方式一:
let addDic:Dictionary = ["parentId":"","title":newTitle,"userId":"abc"]
let request = self.setupPostRequest((addDic as Any as! Dictionary<String, Any>))
DXHttpTool.shareInstance.postHeaderWithRequest(request: request, finished: { (response) in
print(response)
}, failure: { (error) in
})
func setupPostRequest(_ addDic:Dictionary<String, Any> ) -> URLRequest {
var request = URLRequest(url: NSURL.init(string: KAddFolderUrl)! as URL)
request.httpMethod = "POST"
request.setValue("application/json", forHTTPHeaderField: "Content-Type")
request.httpBody = try! JSONSerialization.data(withJSONObject: addDic)
return request
}
func postHeaderWithRequest(request:URLRequestConvertible,finished:@escaping(_ response: AnyObject) -> (), failure:@escaping(_ error: Error)-> ()) {
Alamofire.request(request).responseJSON { (response) in
debugPrint(response)
if response.error == nil {
switch response.result {
case .failure(let error):
print(error)
case .success:
finished(response.value as AnyObject)
}
} else {
failure(response.error!)
}
}
}
请求方式二:(Moya)
var task: Task {
var param : [String : Any] = [:]
case .postAddFolder(let title,let parentId,let userId):
switch self {
param["parentId"] = parentId
param["title"] = title
param["userId"] = userId
return .requestParameters(parameters: param, encoding:JSONEncoding.default)
Alamofire中是这样使用的:
URLEncoding 和URL相关的编码,有两种编码方式:
直接拼接到URL中
通过request的httpBody传值
JSONEncoding 把参数字典编码成JSONData后赋值给request的httpBody
PropertyListEncoding把参数字典编码成PlistData后赋值给request的httpBody