【问题标题】:Trying to Post a dictionary to my backend试图将字典发布到我的后端
【发布时间】:2016-10-03 09:59:08
【问题描述】:

我正在尝试使用 Alamofire 将字典发布到我的后端:

这是我的代码:

func postCheckUserPhonenumbers(phonenumbers:[String], completionHandler: (([AnyObject?], AnyObject?) -> Void)) {
    let urlString = Constant.apiUrl().stringByAppendingFormat(Constant.apiPostCheckUserPhonenumbers)
    
    let phoneNumbersDictionary = phonenumbers.map({ ["number": $0] })
    
    let json = JSON(phoneNumbersDictionary)
    print(json)
    
    Alamofire.request(.POST, urlString, parameters: phoneNumbersDictionary, encoding: .JSON).validate().responseJSON(completionHandler: {response in
        if response.result.isSuccess{
            if let json = response.result.value {
                let json = JSON(json)
                
            }
        }
        if response.result.isFailure{
            
        }
    })
}

它不会编译,因为 phoneNumbersDictionairy 不符合预期的参数:

不过,print(json) 打印的正是我在 Postman 中的内容。这是我要发布的身体。 打印的声明:

[
  {
    "number" : "85555512"
  },
  {
    "number" : "85551212"
  },
  {
    "number" : "55648583"
  }
]

我的邮递员:

我怎样才能做到这一点?

【问题讨论】:

  • phonenumbers 的数组长什么样?
  • 你的错误意味着这个 Alamofire 方法向网络发送了一个字典,但是你试图发送一个它显然不能发送的字典数组。
  • 基本上,您的“phoneNumbersDictionary”不是字典。它是一个数组。

标签: swift alamofire postman swifty-json


【解决方案1】:

正如错误消息所述,phonenumbers.map({["number": $0]})返回[[String:String]] 类型的数组,正如您在我附加的图片中看到的那样。

Alamofire 需要一个 [String: AnyObejct]? 类型的数组作为参数。

但也许How to send a post request with bodySending json array via alamofire 可以帮助你。

【讨论】:

    【解决方案2】:

    我最终使用了这个:

    func postCheckUserPhonenumbers(phonenumbers:[String], completionHandler: (([AnyObject?], AnyObject?) -> Void)) {
        let urlString = Constant.apiUrl().stringByAppendingFormat(Constant.apiPostCheckUserPhonenumbers)
    
        let phoneNumbersDictionary = phonenumbers.map({ ["number": $0] })
    
        let inputJSON = try? NSJSONSerialization.dataWithJSONObject(phoneNumbersDictionary, options: [])
    
        let request = NSMutableURLRequest(URL: NSURL(string: urlString)!)
        request.setValue("application/json", forHTTPHeaderField: "Content-Type")
        request.HTTPMethod = "POST"
        request.HTTPBody = inputJSON
    
        Alamofire.request(request).validate().responseJSON(completionHandler: {response in
            if response.result.isSuccess{
                if let value = response.result.value {
                    let json = JSON(value)
                    let jsonString = json.rawString()
                    if let users:Array<User> = Mapper<User>().mapArray(jsonString) {
                        completionHandler(users, nil)
                    } else {
                        completionHandler([nil], nil)
                    }
                }
            }
            if response.result.isFailure{
                let message = ApiMessage()
                message.message = "No users found"
                completionHandler([nil],message)
            }
        })
    }
    

    【讨论】:

      猜你喜欢
      • 2017-10-20
      • 2019-09-07
      • 2021-08-11
      • 1970-01-01
      • 2020-05-01
      • 2022-10-18
      • 1970-01-01
      • 2015-05-02
      • 2018-11-27
      相关资源
      最近更新 更多