我正在使用Swift + Alamofire。我正在使用Rest API以JSON格式返回数据,我在Rest API测试工具(即PostMan)中对其进行了测试。这是它的快照,它工作正常
唯一的问题是此Get请求中的Authorization Header。但是在Swift + Alamofire中不起作用。这是代码片段。
let requestHeaders: HTTPHeaders = [
"Authorization": "bearer " + (Session.user?.accessToken!)!
]
Alamofire.request("http://abcabc.com/api/StoreType/Stores", headers: requestHeaders).responseJSON { (response) -> Void in
switch response.result {
case .success:
guard let rawJson = response.result.value as? [String: Any] else {
let serverError = NSError(domain: "Server error", code: (response.response?.statusCode)!, userInfo: ["msg": "Received Malformed data from server"])
errorBlock(serverError)
return
}
let formattedJson = JSON(rawJson)
if (formattedJson["Message"] != JSON.null) {
let serverError = NSError(domain: "Server error", code: (response.response?.statusCode)!, userInfo: ["msg": formattedJson["Message"]])
errorBlock(serverError)
} else { // No error case
Session.storeCategories = StoreCategory.initializeStoreCategoriesWithStores(storeCategoryList: formattedJson)
successBlock(formattedJson)
}
case .failure(let error):
errorBlock(error)
}
}
但我总是得到以下错误。 (来自Xcode的快照)
答案 0 :(得分:1)
您的回复类型为[[String: Any]]
而不是[String: Any]
。
将其更改为:
guard let rawJson = response.result.value as? [[String: Any]] else {
let serverError = NSError(domain: "Server error", code: (response.response?.statusCode)!, userInfo: ["msg": "Received Malformed data from server"])
errorBlock(serverError)
return
}
答案 1 :(得分:0)
创建URLRequest
类型的自定义请求对象,在您的请求对象中设置URL
,Headers
和RequestType
,然后只需要Alamofire
启动此请求
let requestHeaders: [String: String] = [
"Authorization": "bearer " + (Session.user?.accessToken!)!
]
if let url = URL(string: "https://www.example.com/someApiURL") {
var request = URLRequest(url: url)
request.httpMethod = "GET"
request.headerParam = requestHeaders
Alamofire.request(request).responseJSON{ (response) -> Void in
switch response.result {
case .success:
guard let rawJson = response.result.value as? [String: Any] else {
let serverError = NSError(domain: "Server error", code: (response.response?.statusCode)!, userInfo: ["msg": "Received Malformed data from server"])
errorBlock(serverError)
return
}
let formattedJson = JSON(rawJson)
if (formattedJson["Message"] != JSON.null) {
let serverError = NSError(domain: "Server error", code: (response.response?.statusCode)!, userInfo: ["msg": formattedJson["Message"]])
errorBlock(serverError)
} else { // No error case
Session.storeCategories = StoreCategory.initializeStoreCategoriesWithStores(storeCategoryList: formattedJson)
successBlock(formattedJson)
}
case .failure(let error):
errorBlock(error)
}
}
}
答案 2 :(得分:0)
试试这个,对于json的响应类映射,你可以使用 Codable 或 ObjectMapper
var headers = ["":""]
headers["Authorization"] = "bearer " + (Session.user?.accessToken!)!
Alamofire.request(baseURL + endpoint,headers: headers)
.responseArray { (response: DataResponse<[Model]>) in
print("Response: \(response)")
}