天天看点

jsonEncoding

当做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