Reactor doOnError - 如何在方法参数中包含多个异常类型

问题描述 投票:0回答:1

我想在 Reactive Spring Boot API 的 Controller 中以相同的方式处理多个异常。

这个想法是发送一个

HttpStatus.BAD_REQUEST
作为业务逻辑中多个类型的
Exception
的错误响应。

我的方法结束是这样的:

@PostMapping("/my-api")
public Mono<ResponseEntity<String>> save(@RequestBody JsonNode rawDto) {
    
    return 
        myValidator.validate(rawDto)
           .flatMap(validDto -> 
                      myService.save(validDto))
                         .doOnSuccess(result-> 
                                       new ResponseEntity<>(HttpStatus.OK))
                           .doOnError(MyValidationException.class, error-> 
                                         new ResponseEntity<>(HttpStatus.BAD_REQUEST))
                           .doOnError(MyBusinessLogicException.class, error-> 
                                         new ResponseEntity<>(HttpStatus.BAD_REQUEST))
                           .doOnError(MyRemoteApiException.class, error-> 
                                         new ResponseEntity<>(HttpStatus.BAD_REQUEST))
                           .doOnError(MyDataConstraintException.class, error-> 
                                         new ResponseEntity<>(HttpStatus.BAD_REQUEST)); // and so on
}
                           

我想将多个异常合并在一个doOnError

块中。

与此类似的东西:

.doOnError(MyValidationException.class | MyBusinessLogicException.class | MyRemoteApiException.class, // and so on error-> new ResponseEntity<>(HttpStatus.BAD_REQUEST))
我不确定有什么方法可以组合多个异常。

在寻找更好的选择之前,我不想使用

if

条件。

如有任何帮助,我们将不胜感激。

提前致谢。

java spring-boot exception spring-webflux reactive-programming
1个回答
0
投票
作为一个选项,使用此重载版本:

public final Flux<T> doOnError(Predicate<? super Throwable> predicate, final Consumer<? super Throwable> onError)

Set

private final Set<Class<?>> errors = Set.of( MyValidationException.class, MyBusinessLogicException.class, MyRemoteApiException.class, MyDataConstraintException.class ) ... .doOnSuccess(result-> new ResponseEntity<>(HttpStatus.OK)) .doOnError( error -> errors.contains(error.getClass()), // <---- now this is one predicate error-> new ResponseEntity<>(HttpStatus.BAD_REQUEST) )
    
© www.soinside.com 2019 - 2024. All rights reserved.