打印Alamofire请求正文

问题描述 投票:14回答:5

我正在使用Alamofire库与iO中的API进行连接。我在一个连接中有问题,我不知道是否是由于正文中编码的数据或其他任何原因。为了检测到我的错误,我试图在控制台中打印请求正文,以检查是否发送了正确的数据结构。

我的代码如下:

func updateUser (#user: User, completionHandler: (responseObject: User?, error: AnyObject?) -> ()) {
    let parameters = [
        "_id": "\(user._id!)",
        "email": "\(user.email!)",
        "media": "\(Mapper().toJSONArray(user.media!))",
        "blogs": "\(Mapper().toJSONArray(user.blogs!))"
    ]

    var manager = Alamofire.Manager.sharedInstance
    manager.request(.PUT, apiUrl + "/route/to/api", parameters: parameters, encoding: .JSON)
        .responseObject{ (req: NSURLRequest, res: NSHTTPURLResponse?, user: User?, data: AnyObject?, error: NSError?) in
            if(error != nil) {
                NSLog("Error API updateUser: \(error)")
            }
            else {
                completionHandler(responseObject: user as User?, error: data)
            }
    }
}

用户是可映射对象,因为我使用的是与Alamofire结合使用的ObjectMapper。用户由以下代码定义:

class User: Mappable {
   var _id: String?
   var name: String?
   var media: [Media]?

   init(_id: String, name: String, media: [Media]){
      self._id = _id;
      self.name = name;
      self.media = media
   }

   required init=(_ map: Map){
      mapping(map)
   }

   func mapping(map: Map){
      _id <- map["_id"]
      name <- map["name"]
      media <- map["media"]
   }
}

媒体的定义类似于用户,但具有不同的变量。]​​>

此外,除了打印请求主体,我想知道是否可以以更有效的方式将参数包括到Alimofire请求中(类似于解析User对象并将其替换为parameter变量之类的东西)

对我的问题有任何想法吗?

编辑:

根据@Travis的建议,最终我找到了打印请求正文的解决方案。在下面可以找到代码:

println("request body: \(NSString(data:req.HTTPBody!, encoding:NSUTF8StringEncoding) as String?)")

关于将无法使用的对象作为参数传递,我遵循了官方文档,但我可以做到。

我正在使用Alamofire库与iO中的API进行连接。我在一个连接中有问题,我不知道是否是由于正文中编码的数据或其他任何原因。按顺序...

ios iphone swift alamofire
5个回答
9
投票

第一个问题的答案是,


39
投票

对于Swift 3 +


5
投票

为打印日志的Request类添加了以下扩展名。


1
投票

只需稍微简化一下即可。


0
投票

对于Swift 4和Swift 5,就像这样:

© www.soinside.com 2019 - 2024. All rights reserved.