1

JSONデータでリクエストを検証する新しいObservableをフィルタリングして生成したい単純なサーバーリクエストがあります。

リクエストが無効な場合でも、サーバーの応答がステータス コード 200 を返すため、これを行う必要があります。ただし、Json 応答でこの結果をフィルタリングできます。

サーバーの応答:

<NSHTTPURLResponse: 0x7fb2d2617850> { URL: http://service-.herokuapp.com/--} { status code: 200, headers ...

ジョンソン:

{"system": {"code": "401","message": "Access Not Authorized"}}

私のrxリクエストは次のとおりです。

let manager = Manager.sharedInstance
return manager.rx_request(method, "\(ApiRoutes.baseURL)\(path)", parameters: parameters)
// then validate server response
.flatMap{
     $0.validate(statusCode: 200..<300)
     .rx_responseData()
}
// then I create a new Observable validating the received json
.flatMapLatest { response, data in
     return Observable.create{ observer in
          let json = JSON(data: data)

          let statusCode = Int(json["system"]["code"].numberValue) ?? 400

          if 200..<300 ~= statusCode {
                observer.onNext((response,data))
          }else{
                observer.onError(NSError(domain: "test", code: 1, userInfo: nil))
          }
          observer.onCompleted()
          return NopDisposable.instance
     }
}
.observeOn(MainScheduler.instance)

私の質問は次のとおりです: 私の json パス (200 から 300 の間のステータス コード) の場合、Event Next を送信し、Event Complete の後に、これがこのシグナルを完了し、最初のシグナル Completes も同様に完了します。しかし、JSON を検証するときにイベント エラーを送信すると、最初のシグナルが完了または失敗しません。これどうやってするの?

ありがとうございました

4

1 に答える 1