Webflux не распространяет исключение, когда Schedulers.elastic в Springboot - PullRequest
0 голосов
/ 13 декабря 2018

Я столкнулся с проблемой при попытке обработать исключения в Springboot при использовании webflux.Я реализовал класс ResponseEntityExceptionHandler, который работает нормально, однако, если исключение выдается из потока WebFlux, оно никогда не вызывается (хотя, если используется Schedulers.immediate (), в этом случае также вызывается обработчик исключения).Самый простой способ воспроизвести эту проблему, которую я обнаружил, - выполнить:

Mono.fromCallable(() -> {
        throw new IllegalArgumentException();
    })
    .doOnError(throwable -> {
        throw new IllegalArgumentException();
    })
    .subscribeOn(Schedulers.elastic())
    .subscribe(result -> {}, throwable -> {throw new IllegalArgumentException();});

Как я уже сказал, если вместо Schedulers.elastic () я использую Schedulers.immediate (), то я могу обработать исключение намой класс ResponseEntityExceptionHandler.Как я могу распространить исключение, чтобы я всегда мог обработать его в своем классе обработчика?

Заранее спасибо

1 Ответ

0 голосов
/ 17 декабря 2018

Я наконец позволил Spring обработать исключения (через ExceptionHandler), поэтому в моем контроллере я установил ответ как:

final DeferredResult<ResponseDTO> result = new DeferredResult<>();
Mono.fromCallable(...).subscribe(result::setResult, result::setErrorResult);
...