json - Alamofire CRUD POST JSON

标签 json swift serialization alamofire

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

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

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
}

}

我收到的错误如下:

Request failed with error: JSON could not be serialized because of error: The data couldn’t be read because it isn’t in the correct format.

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

最佳答案

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

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

但是你想要这个:

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

关于json - Alamofire CRUD POST JSON,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40113377/

相关文章:

ios - 将 Xcode 6.4 更新到 Xcode 7.0 后,NSData dataWithContentsOfURL 为空

android - 使用 Retrofit 库获取简单的 JSON 对象响应

ios - 自定义 UITableView 单元格导致错误

macos - 在 Swift 中打开新窗口

c++ - 使用 shared_ptr boost 序列化而不在指向类中实现 serialize() 函数

javascript - 在 Node.js 中从 JSON 导入数据库中的数据

ios - Swift 中的时间戳(毫秒)

java - xstream - 无法初始化自定义列表元素的值

javascript - JSON 序列化在 loadFromJSON 之后忽略 fabric.js 中的自定义属性

SQLSTATE 58004,在 DB2 LUW 中的 LISTAGG 中使用 JSON_OBJECT() 中的 NULL 时出现错误 "invalid qnc assigment"