2015-07-15 19 views
9

Tôi đang sử dụng thư viện Alamofire để kết nối với API trong iOs. Tôi có một vấn đề trong một trong những kết nối, và tôi không biết nếu đó là vì dữ liệu được mã hóa trong cơ thể hoặc bất kỳ điều gì khác. Để phát hiện lỗi của tôi, tôi đang cố gắng in trong bảng điều khiển phần thân yêu cầu để kiểm tra xem tôi có đang gửi cấu trúc dữ liệu chính xác hay không.In nội dung yêu cầu của Alamofire

Mã của tôi là như sau:

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) 
      } 
    } 
} 

tài là một đối tượng trí trên bản đồ, kể từ khi tôi đang sử dụng kết hợp với ObjectMapper Alamofire. Người dùng được xác định theo mã sau:

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"] 
    } 
} 

Phương tiện được định nghĩa như Người dùng, nhưng có các biến khác nhau.

Ngoài ra, tôi muốn biết, ngoài cơ thể yêu cầu in, nếu tôi có thể đưa các tham số vào yêu cầu Alimofire một cách hiệu quả hơn (giống như phân tích đối tượng User và thay thế nó cho biến thông số)

Bất kỳ ý tưởng nào về sự cố của tôi?

EDIT:

Theo đề xuất của @Travis, cuối cùng tôi đã tìm thấy giải pháp để in nội dung yêu cầu. Dưới đây bạn có thể tìm thấy mã:

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

Về việc chuyển đi làm tham số một đối tượng mà tôi không thể làm việc, tôi đã làm theo tài liệu chính thức nhưng tôi có thể làm được.

+0

Đối với yêu cầu khai thác gỗ/phản ứng có: https://github.com/konkab/AlamofireNetworkActivityLogger – neoneye

Trả lời

7

Câu trả lời cho câu hỏi đầu tiên của bạn,

println("request body: \(request.HTTPBody)") 

Theo như câu hỏi thứ 2 của bạn đi, có một phần toàn bộ API Parameter trừu tượng cũng như CRUD & Authorization trên Alamofire main page.

+1

Cảm ơn bạn đã trả lời của bạn, nhưng request.HTTBody trở lại NSData đối tượng, và tôi không thể biết nếu nó là chuỗi mà tôi mong đợi để có. Tôi mong đợi để có được một cái gì đó như thế này: _ // HTTP body: {"foo": [1, 2, 3], "bar": {"baz": "qux"}} _ (với các biến của riêng tôi), và Tôi có được những điều sau đây: _ <7b225f69 64223a22 35353962 61656165 ..._ – Alfonso

+0

Có vô số cách để chuyển đổi NSData thành một chuỗi (hoặc JSON). Tôi khuyên bạn nên sử dụng tìm kiếm trên đây để tìm một trong số họ. – Travis

0

Chỉ cần biến nó dễ dàng hơn một chút.

if let requestBody = request.request?.HTTPBody { 
     do { 
      let jsonArray = try NSJSONSerialization.JSONObjectWithData(requestBody, options: []) 
      print("Array: \(jsonArray)") 
     } 
     catch { 
      print("Error: \(error)") 
     } 
    } 
24

Đối Swift 3+

print(NSString(data: (response.request?.httpBody)!, encoding: String.Encoding.utf8.rawValue)) 
+0

Đó là bản demo thực sự tốt dựa trên Swift3.0, nó hoạt động trên mặt của tôi. – Kevin

Các vấn đề liên quan