Spring Boot 如何使用@ControllerAdvice从服务类中捕获异常?

r1zhe5dt  于 2022-12-04  发布在  Spring
关注(0)|答案(1)|浏览(175)

我有一些服务类,其中包含多个抛出错误的方法,抛出错误的方法的一个例子:

public Optional<Item> getItemById(Long itemId) throws Exception {
        return Optional.of(itemRepository.findById(itemId).
                orElseThrow(() -> new Exception("Item with that id doesn't exist")));
    }

我应该在@ControllerAdvice的注解类中捕捉错误吗?我应该如何做?

pobjuy32

pobjuy321#

标记为@ControllerAdvice的控制器会拦截当请求到达时调用的堆栈中抛出的任何异常。如果问题是你是否应该用ControllerAdvice捕捉错误,这取决于你,但它允许你在抛出异常时自定义行为。要做到这一点,你应该创建一个如下所示的类:

@ControllerAdvice
public class GlobalExceptionHandler {

  @ExceptionHandler({ Exception.class, MyCustomException.class }) //Which exceptions should this method intercept
  public final ResponseEntity<ApiError> handleException(Exception ex){
    return new ResponseEntity<>(body, HttpStatus.NOT_FOUND); //Or any HTTP error you want to return
  }

}

相关问题