我使用Alamofire
向休息服务请求。如果请求成功,则服务器返回内容类型为JSON
的{{1}}。但是如果请求失败,服务器将返回一个简单的application/json
。
所以,我不知道如何使用String
处理它,因为我不知道响应的样子。我需要一个解决方案来处理不同的响应类型。
我可以使用此代码处理成功的请求:
Alamofire
这个代码我可以用来处理失败的请求:
request(.POST, wholeUrl, parameters: parameters, encoding: .Custom(encodingClosure))
//.validate()
.responseJSON {
(request, response, data, error) -> Void in
//check if error is returned
if (error == nil) {
//this crashes if simple string is returned
JSONresponse = JSON(object: data!)
}
答案 0 :(得分:2)
不要指定响应类型,也不要注释.validate()
。
检查错误,然后相应地进行
request(.POST, wholeUrl, parameters: parameters, encoding: .Custom(encodingClosure))
.validate()
.response {
(request, response, data, error) -> Void in
//check if error is returned
if (error == nil) {
//this is the success case, so you know its JSON
//response = JSON(object: data!)
}
else {
//this is the failure case, so its a String
}
}
答案 1 :(得分:1)
我已经解决了我的问题:
request(.POST, wholeUrl, parameters: parameters, encoding: .Custom(encodingClosure))
.validate()
.response {
(request, response, data, error) -> Void in
//check if error is returned
if (error == nil) {
var serializationError: NSError?
let json: AnyObject? = NSJSONSerialization.JSONObjectWithData(data! as! NSData, options: NSJSONReadingOptions.AllowFragments, error: &serializationError)
JSONresponse = JSON(object: json!)
}
else {
//this is the failure case, so its a String
}
}
答案 2 :(得分:0)
快捷键4
如果期望在成功上使用JSON
,并且在 error 上使用String
,则应调用.validate()
钩子并尝试如果请求失败,则将响应数据解析为字符串。
import Alamofire
import SwiftyJSON
...
Alamofire.request("http://domain/endpoint", method: .get, parameters: nil, encoding: JSONEncoding.default, headers: nil)
.validate()
.responseJSON(completionHandler: { response in
if let error = response.error {
if let data = response.data, let errMsg = String(bytes: data, encoding: .utf8) {
print("Error string from server: \(errMsg)")
} else {
print("Error message from Alamofire: \(error.localizedDescription)")
}
}
guard let data = response.result.value else {
print("Unable to parse response data")
return
}
print("JSON from server: \(JSON(data))")
})