使用alamofire将带有JSON对象的POST请求和查询参数发送到REST Web服务

时间:2015-12-15 09:27:05

标签: json swift post alamofire

我尝试使用alamofire

向POST网络服务发送POST请求

我将json对象作为POST主体传递,我得到了响应,一切正常,直到现在

Alamofire.request(.POST, path, parameters: createQueryParams(), encoding: .JSON)
            .responseArray { (request, response, myWrapper, error) in
                if let anError = error
                {
                    completionHandler(nil, error)
                    println("Error in handling request or response!")
                    return
                }
                completionHandler(myWrapper, nil)
        }

private class func createQueryParams() -> [String:AnyObject]{
        var parameters:[String:AnyObject] = [String:AnyObject]()
        parameters["lat"] = lLat!
        parameters["lng"] = lLon!

        if category != nil { // here is the problem
            parameters["category"] = category!
        }

        return parameters
    }

我有一个类别过滤器,如果类别变量中有值,我想将它作为QueryParam发送(应该编码为.URL?但是我如何发送json对象?)

此代码不起作用

if category != nil {
            parameters["category"] = category!
        }

我该怎么做?希望我能解释清楚

提前致谢

1 个答案:

答案 0 :(得分:4)

你可以这样解决:

let mutableUrlRequest = NSMutableUrlRequest(URL: URL.URLByAppendingPathComponent(path)
mutableUrlRequest.HTTPMethod = .POST
let request = Alamofire.ParameterEncoding.URL.encode(mutableUrlRequest, parameters: createQueryParameters()).0

Alamofire.request(request)

但是,我建议你查看Alamofire的路由器声明并尝试这个。有了它,您可以创建动态请求,并且所有这些请求都在一个文件中声明。

编辑:
哦等等你可以忘记以前的编辑解决方案非常简单,你也自己回答了。是的,您只需要将编码更改为.URL,您仍然可以发送json对象,因为Alamofire本身会将json对象解码为queryparams的字符串。

Alamofire.request(.POST, path, parameters:createQueryParams(), encoding: .URL).responseArray...

编辑2:
由于第一次编辑不起作用,请尝试:

let url = NSURL(string: path)!
let urlRequest = NSURLReqeust(URL: url)
request.HTTPMethod = "Post"
let encoding = Alamofire.ParameterEncoding.URL
let request = encoding.encode(urlRequest, createQueryParams())
Alamofire.request(request)