试图将字典发布到我的后端

Posted

技术标签:

【中文标题】试图将字典发布到我的后端【英文标题】: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”不是字典。它是一个数组。 这会帮助你***.com/questions/27026916/… 【参考方案1】:

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

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

但也许How to send a post request with body 或Sending 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)
        
    )

【讨论】:

以上是关于试图将字典发布到我的后端的主要内容,如果未能解决你的问题,请参考以下文章

在 Google OAuth2 授权流程之后如何将 JWT 从我的后端服务器发送到我的前端

POST 参数不是从我的反向代理传递到我的后端服务器

为啥我的后端中的 axios 发布请求没有将任何数据发送回我的外部 api? -

Windows 上的 Pyusb - 没有可用的后端

使用 Alamofire 在 Swift 中发布嵌套 JSON

如何将角度 html 表单输入发送到 Spring Boot Rest Web 控制器