настраиваемое отображение onError rxjava при переводе dto - PullRequest
0 голосов
/ 29 июня 2018

У меня есть следующий метод, который извлекает данные из внешней службы. Эти данные получены как dto, и мне нужно преобразовать их в объект сущности. Прямо сейчас, если есть проблема, генерируется ProviderNotReachableException, однако я хотел бы выдать другое исключение, когда есть ошибка в логике перевода, например, для исключения NumberFormat. Поскольку я новичок в rxjava, я хотел бы получить совет от старших разработчиков по этому вопросу. Спасибо, Jorge

 @Override
    public Observable<List<Itinerary>> itinerariesFromProvider(final FlightSpecification flightSpecification,
                                                               final String provider) {

        final Map<String, Object> params = getQueryParams(flightSpecification);

        return this.retrofitProviderService.itineraries(provider, params)
                .concatMapIterable(itineraryDtoList -> itineraryDtoList)
                .map(it -> {
                    logger.debug("Translating in thread: {}", Thread.currentThread().getName());
                    return itineraryTranslator.fromItineraryDtoToItinerary(it);
                })
                .toList()
                .subscribeOn(Schedulers.io())
                .doOnError(throwable -> new ProviderNotReachableException(format("For input string %s", provider), throwable))
                .toObservable();
    }

1 Ответ

0 голосов
/ 01 июля 2018

Вместо doOnError вы можете использовать оператор onErrorResumeNext, он получает в качестве параметра функцию с Throwable в качестве ввода (onError мы получили) и возвращает Observable в качестве вывода, с этим оператором вы можно сопоставить любые исключения, которые вам нравятся, с другим, используя Observable.error:

.onErrorResumeNext(throwable -> {
                if (throwable instanceof ProviderNotReachableException) {
                    return Observable.error(new MyCustomException());
                } else {
                    return Observable.error(throwable);
                }
            });
...