Alamofire CRUD POST一个JSON

时间:2016-10-18 16:21:24

标签: json swift serialization alamofire

如何使用CRUD example作为Base,以JSON格式将POST参数发送到Alamofire请求?我无法发送参数。

以下是我的路由器生成器:

fileprivate enum Router: URLRequestConvertible {

case login(reqData: Data)
case preferencesIndex()
case preferencesUpdate(parameters: Parameters)

static let baseURLString = "http://test.com"

var method: HTTPMethod {
    switch self {
    case .login, .preferencesIndex:
        return .get
    case .preferencesUpdate:
        return .post
    }
}

var path: String {
    switch self {
    case .login:
        return "/login"
    case .preferencesIndex:
        return "/preferences/list"
    case .preferencesUpdate:
        return "/preferences/update"
    }
}

// MARK: URLRequestConvertible
func asURLRequest() throws -> URLRequest {
    let url = try Router.baseURLString.asURL()
    let paramsDefault: Parameters = ["_format" : "json", "_authorization" : "testkey"]

    var urlRequest = URLRequest(url: url.appendingPathComponent(path))
    urlRequest.httpMethod = method.rawValue

    urlRequest = try URLEncoding.default.encode(urlRequest, with: paramsDefault)

    switch self {
    case .preferencesUpdate(let parameters):
        //POST JSON
        let data = try JSONSerialization.data(withJSONObject: parameters, options: [])
        urlRequest.httpBody = data
        urlRequest.setValue("application/json", forHTTPHeaderField: "Content-Type")
    default:
        break
    }

    return urlRequest
}

}

我收到的错误如下:

  

请求失败并显示错误:由于错误,无法序列化JSON:   无法读取数据,因为格式不正确。

我认为我的问题在于序列化,因为我将参数发送为Parameters类型...

2 个答案:

答案 0 :(得分:0)

我认为问题的一部分可能是您想要对请求进行JSON编码时尝试对请求进行URL编码。你有这一行:

urlRequest = try URLEncoding.default.encode(urlRequest, with: paramsDefault)

但你想要这个:

urlRequest = try JSONEncoding.default.encode(urlRequest, with: paramsDefault)

答案 1 :(得分:0)

您需要在swift 3中发送如下所示的请求

getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_HIDDEN);