我对AWS
并使用API Gateway -> Lambda -> RDS
相当新。另外,我在SDK
移动应用程序中使用生成的iOS
用于使用API
的<{1}}。
直接路径在返回成功时工作正常(200)。但是,我试图为边缘情况添加更多错误处理。如果API
请求找不到预期的资源,我会尝试返回404 error
。我已经适当地将此添加到API集成响应和方法响应中。我可以对此进行测试,并按预期返回错误模型以及正确的HTTP Status code of 404
。
但是,我正在努力解决如何在移动应用程序方面处理这个问题。如何由生成的SDK
处理?它只是在API调用中抛出错误,我期望找到一种方法来检索我的&#34;错误&#34;我定义的模型对象。
生成的SDK(Swift)方法:
public func userUseridentityGet(useridentity: String) -> AWSTask<RSAPI_UserModel> {
let headerParameters = [
"Content-Type": "application/json",
"Accept": "application/json",
]
let queryParameters:[String:Any] = [:]
var pathParameters:[String:Any] = [:]
pathParameters["useridentity"] = useridentity
return self.invokeHTTPRequest("GET", urlString: "/user/{useridentity}", pathParameters: pathParameters, queryParameters: queryParameters, headerParameters: headerParameters, body: nil, responseClass: RSAPI_UserModel.self) as! AWSTask<RSAPI_UserModel>
}
在运行时,当我打印错误时,我得到以下注销:
发生错误:错误 Domain = com.amazonaws.AWSAPIGatewayErrorDomain Code = 1&#34;(null)&#34; 的UserInfo = {HTTPBody = { 代码= 404; message =&#34;未找到结果。&#34 ;; &#34;请求-ID&#34; =&#34; 132b8eaa-7b24-11e7-b1fd-d342f0413b7d&#34 ;; type = NotFound; },HTTPHeaderFields = {type = immutable dict,count = 8,entries =&gt; 0: x-cache = {contents =&#34;错误 来自cloudfront&#34;} 1:Content-Type = {contents =&#34; application / json&#34;} 3:x-amzn-requestid = {contents = &#34; 131a5075-7b24-11e7-87bd-9fcb4cb4e04e&#34;} 4:Via = {contents =&#34; 1.1 bd4761ff0774f9ee778140b91a0431c9.cloudfront.net(CloudFront)&#34;} 6: 日期= {contents =&#34;星期一,8月7日 2017 03:54:13 GMT&#34;} 10:Content-Length = 134 11:x-amzn-trace-id = {contents = &#34;采样= 0; root = 1-5987e464-d3d8f7801b7ae5aa6a52fc1b&#34;} 12: x-amz-cf-id = {contents = &#34; QKpl64W1qDaeo0zlsx2iOwTW0oO_jyPRmMT7ByPKLnen04qiPEeD6w ==&#34;}}}
问题是如何将反序列化到我的&#34;错误&#34;我定义的对象模型?如何正确检测此错误情况,以便我可以在移动应用程序中编写逻辑来处理它?</ p>
答案 0 :(得分:0)
对于解决方法,我只是通过手动提取数据来处理这个问题。如果有人有更好的方法来解决这个问题。我一定很感兴趣。
if let error = task?.error as NSError? {
print("Error occurred: \(error)")
if error.code == 1 {
let httpBody : NSDictionary = (error.userInfo["HTTPBody"] as? NSDictionary)!
print("Code \(httpBody["code"] ?? "none") - Type \(httpBody["type"] ?? "none") - Message \(httpBody["message"] ?? "none") - RequestID \(httpBody["request-id"] ?? "none")")
}
return nil
}