如何使用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
类型...
答案 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);