Reputation: 71
I'm working with Swift + Alamofire. I'm consuming a Rest API which returns data in JSON format and I've tested it in Rest API Testing tool i.e. PostMan. Here is it's snapshot and it's working fine
The only thing is Authorization Header in this Get request.But same isn't working in Swift+Alamofire. Here goes the code snippet.
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)
}
}
But I get following error always. (Snapshot from Xcode)
Upvotes: 0
Views: 659
Reputation: 4448
Try this, and for response class mapping from json you can use Codable or ObjectMapper
var headers = ["":""]
headers["Authorization"] = "bearer " + (Session.user?.accessToken!)!
Alamofire.request(baseURL + endpoint,headers: headers)
.responseArray { (response: DataResponse<[Model]>) in
print("Response: \(response)")
}
Upvotes: 0
Reputation: 3677
Create a custom request object of type URLRequest
set your URL
, Headers
and RequestType
in your request object then simply ask Alamofire
to start this request.
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)
}
}
}
Upvotes: 0
Reputation: 4891
You response is type of [[String: Any]]
not [String: Any]
.
Change this as:
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
}
Upvotes: 1