斯威夫特:alamofire帖子与json身体

时间:2017-06-08 06:38:39

标签: json swift alamofire

我正在使用alarmofire来实现POST请求。

目标是发布为:

curl -X POST --header 'Content-Type: application/json' 
     --header 'Accept: application/json' -d '{"dest":"Place","reason":"Reason","carId":1,"starttime":1496975475840,"departmentId":3,"distance":0.0,"driverId":1}' 
     'http://localhost:8080/serviceCar/v1_0/placeOrder?access_token=25621648-1da5-438e-a52c-f927e2c59de4'

网址为http://localhost:8080/serviceCar/v1_0/placeOrder

我有一个订单类,如何将对象作为请求主体发布,并将令牌作为表单数据发送?

1 个答案:

答案 0 :(得分:0)

Here正在写这个你想要的案子。

如果提供的ParameterEncoding类型不符合您的需求,您可以创建自己的自定义编码。这是一个快速示例,说明如何构建自定义JSONStringArrayEncoding类型以将JSON字符串数组编码到请求上。

struct JSONStringArrayEncoding: ParameterEncoding {
    private let array: [String]

    init(array: [String]) {
        self.array = array
    }

    func encode(_ urlRequest: URLRequestConvertible, with parameters: Parameters?) throws -> URLRequest {
        var urlRequest = try urlRequest.asURLRequest()

        let data = try JSONSerialization.data(withJSONObject: array, options: [])

        if urlRequest.value(forHTTPHeaderField: "Content-Type") == nil {
            urlRequest.setValue("application/json", forHTTPHeaderField: "Content-Type")
        }

        urlRequest.httpBody = data

        return urlRequest
    }
}

这是设置请求[from doc]的标头的示例:

let user = "user"
let password = "password"

var headers: HTTPHeaders = [:]

if let authorizationHeader = Request.authorizationHeader(user: user, password: password) {
    headers[authorizationHeader.key] = authorizationHeader.value
}

Alamofire.request("https://httpbin.org/basic-auth/user/password", headers: headers)
    .responseJSON { response in
        debugPrint(response)
    }