如何使用 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/