Alamofire 4 URL request to encode JSON parameter

Recently upgraded to Alamofire 4 and running several issues. It's amazing how to encode the url request parameter for JSON in the Alamofire Router. Here is an example that I followed in Alamofire 3.

enum UserRouter: URLRequestConvertible { static let baseURLString = "http://jsonplaceholder.typicode.com/" case Get(Int) case Create([String: AnyObject]) case Delete(Int) var URLRequest: NSMutableURLRequest { var method: Alamofire.Method { switch self { case .Get: return .GET case .Create: return .POST } } let params: ([String: AnyObject]?) = { switch self { case .Get: return (nil) case .Create(let newPost): return (newPost) } }() let url:NSURL = { let relativePath:String? switch self { case .Get(let postNumber): relativePath = "posts/\(postNumber)" case .Create: relativePath = "posts" } var URL = NSURL(string: PostRouter.baseURLString)! if let relativePath = relativePath { URL = URL.URLByAppendingPathComponent(relativePath) } return URL }() let URLRequest = NSMutableURLRequest(URL: url) let encoding = Alamofire.ParameterEncoding.JSON let (encodedRequest, _) = encoding.encode(URLRequest, parameters: params) encodedRequest.HTTPMethod = method.rawValue return encodedRequest } } 

Now in Alamofire 4 this has changed.

 let encoding = Alamofire.ParameterEncoding.JSON let (encodedRequest, _) = encoding.encode(URLRequest, parameters: params) 

Here is what I am trying to use Alamofire 4 Router, but does not work as expected.

 func asURLRequest() throws -> URLRequest { let url = try UserRouter.baseURLString.asURL() var urlRequest = URLRequest(url: url.appendingPathComponent(path)) urlRequest.httpMethod = method.rawValue switch self { case .updateDeviceToken(_,let device): urlRequest = try ParameterEncoding.encode(urlRequest as URLRequestConvertible, with: device) //urlRequest = try JSONEncoding.default.encode(urlRequest, with: device) case .addUser(_, let user): urlRequest = try URLEncoding.default.encode(urlRequest, with: user) case .updateUser(_,_,let user): urlRequest = try URLEncoding.default.encode(urlRequest, with: user) case .lockUser(_,_,let user): urlRequest = try URLEncoding.default.encode(urlRequest, with: user) default: break } return urlRequest 
+5
source share
1 answer

I use this encoding syntax:

 ... method: .get, parameters: parameters, encoding: JSONEncoding.default, headers: nil, ... 

In your case, it could be like this:

 let encoding = Alamofire.JSONEncoding.default 

I also struggled with this problem until I found a simple example:

https://github.com/Alamofire/Alamofire#json-encoding

+7
source

Source: https://habr.com/ru/post/1257720/


All Articles