从 Moya 响应中获取响应

Posted

技术标签:

【中文标题】从 Moya 响应中获取响应【英文标题】:Get response from Moya Response 【发布时间】:2017-01-03 10:10:19 【问题描述】:

我正在使用 RxSwift 和 Moya 来调用请求并获得响应。

我的代码:

NetworkManager.shared.request(api: .carrot2diamond, showLoading: false).subscribe( (response) in
// how to handle with response
).addDisposableTo(self.disposeBag)

显示如下:

["Moya_Logger: [03/01/2017 16:52:50] 请求: http://api.360live.vn/api_shop/carrot2diamond?appversion=1.0&auth_key=f4aeaa8f9df1fd8ef68e1f3e431cd77995d565ef66e7dff9&devid=EA51920A-5C21-41D8-A420-62AF6AAD20FD&platform=2"] [“Moya_Logger:[03/01/2017 16:52:50] 请求标头:[:]”] [“Moya_Logger:[03/01/2017 16:52:50] HTTP 请求方法:GET”] [“Moya_Logger:[03/01/2017 16:52:50] 响应: URL: http://api.360live.vn/api_shop/carrot2diamond?appversion=1.0&auth_key=f4aeaa8f9df1fd8ef68e1f3e431cd77995d565ef66e7dff9&devid=EA51920A-5C21-41D8-A420-62AF6AAD20FD&platform=2 状态码:200,标头 \n \"Access-Control-Allow-Origin\" = \"*\";\n \"内容长度\" = 53;\n \"内容类型\" = \"application/json; charset=utf-8\";\n 日期 = \"2017 年 1 月 3 日,星期二 格林威治标准时间 09:52:50\";\n 服务器 = \"Jetty(9.2.z-SNAPSHOT)\";\n \"X-Server\" = 360Live;\n "] ["\"error\":0,\"message\":\"exchange 胡萝卜值无效\""]

我想从这一行检测错误:

["\"error\":0,\"message\":\"交换胡萝卜值无效\""]

当我发送response.element?.response?.description 时,它只会给我:

▿ 可选 - 一些:“ URL:http://api.360live.vn/api_shop/carrot2diamond?appversion=1.0&auth_key=f4aeaa8f9df1fd8ef68e1f3e431cd77995d565ef66e7dff9&devid=EA51920A-5C21-41D8-A420-62AF6AAD20FD&platform=2 状态码:200,标头 \n \"Access-Control-Allow-Origin\" = \"*\";\n \"内容长度\" = 53;\n \"内容类型\" = \"application/json; charset=utf-8\";\n 日期 = \"2017 年 1 月 3 日,星期二 格林威治标准时间 09:52:50\";\n 服务器 = \"Jetty(9.2.z-SNAPSHOT)\";\n \"X-Server\" = 360Live;\n "

【问题讨论】:

你说的responseEvent<Response> 【参考方案1】:

我刚刚通过在调用request 后添加mapJSON() 解决了这个问题。

mapJSON()的声明是

func mapJSON(failsOnEmptyData: Bool = default) -> Observable<Any>

它的描述是:

Maps data received from the signal into a JSON object. If the conversion fails, the signal errors.

我的代码:

NetworkManager.shared.request(api: .carrot2diamond, showLoading: false).mapJSON().subscribe( (response) in
   if let element = response.element, let dic = element as? [String: AnyObject], let message = dic["message"] as? String 
       print(message) // ->>>> exchange carrot value invalid
   
).addDisposableTo(self.disposeBag)

【讨论】:

以上是关于从 Moya 响应中获取响应的主要内容,如果未能解决你的问题,请参考以下文章

将 Moya 响应错误转换为定义的类型

在 Moya 14 中记录响应和请求

使用 Moya + RxSwift 处理自定义错误响应

如何在映射之前修改 Moya 响应?

Moya Requests 需要很长时间才能响应

使用 Rx 编程 (Moya) 将 JSON 响应映射到对象