Retrofit2 + RxJava如何从服务器获取自定义错误?

时间:2018-01-18 10:29:40

标签: android retrofit2 rx-java2

我创建了retrofit2服务:

@POST("getTransactions/{page}")
    Single<List<TransactionItem>> getTransactions(@Body TransactionRequest transactionRequest, @Path("page") int page);

尝试在我的Presenter中实现它:

private class TransactionsHandler implements SingleObserver<List<TransactionItem>> {

        @Override
        public void onSubscribe(Disposable d) {
            callView(TransactionsFragment::showProgress);
        }

        @Override
        public void onSuccess(List<TransactionItem> transactionItems) {
            //update UI
        }

        @Override
        public void onError(Throwable e) {
            //show error on UI
        }
    }

但在onError方法中,我只能获得Throwable

在后端,我实现自定义错误并将其返回给android。例如:

@Data
  @AllArgsConstructor
  private static class EmailException {
    private String message;
  }

return new ResponseEntity<>(new EmailException("Email not sended"), HttpStatus.INTERNAL_SERVER_ERROR);

但我无法从errorBody获得此Throwable。如何实现自定义错误。

1 个答案:

答案 0 :(得分:2)

而不是这个

Single<List<TransactionItem>> getTransactions(@Body TransactionRequest transactionRequest, @Path("page") int page);

请声明如下:

Single<Response<List<TransactionItem>>> getTransactions(@Body TransactionRequest transactionRequest, @Path("page") int page);

此外,您需要更新观察者以实现SingleObserver<Response<List<TransactionItem>>>

请注意,即使响应包含错误,也只会调用onSuccess方法。然后在onSuccess中,您可以检查回复是否成功。

请查看Get response status code using Retrofit 2.0 and RxJava了解详情。