当前位置:   article > 正文

【springboot】如何优雅处理异常!

【springboot】如何优雅处理异常!

Spring Boot 中处理异常的优雅方式通常涉及到全局异常处理、@ControllerAdvice、@RestControllerAdvice 和 ResponseEntity 等机制。以下是如何在 Spring Boot 中优雅地处理异常:

  1. 创建全局异常处理类
    使用 @ControllerAdvice@RestControllerAdvice 注解创建一个全局异常处理类,它可以捕获控制器抛出的所有异常。@RestControllerAdvice@ControllerAdvice@ResponseBody 的组合,适用于 RESTful API 场景。

    @RestControllerAdvice
    public class GlobalExceptionHandler {
    
        @ExceptionHandler(value = Exception.class)
        public ResponseEntity<Object> handleException(Exception ex) {
            // 根据异常类型定制响应内容
            if (ex instanceof YourCustomException) {
                return ResponseEntity.status(HttpStatus.BAD_REQUEST).body(new ErrorResponse("custom error message"));
            } else if (ex instanceof MethodArgumentNotValidException) {
                BindingResult bindingResult = ((MethodArgumentNotValidException) ex).getBindingResult();
                // 处理校验错误
            }
    
            // 通用异常处理
            log.error("Global exception handler caught an exception: ", ex);
            return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body(new ErrorResponse("Internal server error"));
        }
    }
    
    public class ErrorResponse {
        private String errorMessage;
    
        // 构造函数、getter 和 setter 等
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
  2. 自定义异常类
    为了更好的区分和处理不同类型的异常,可以创建自定义异常类,并在控制器方法中抛出。

    public class YourCustomException extends RuntimeException {
        public YourCustomException(String message) {
            super(message);
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
  3. 针对特定异常处理
    GlobalExceptionHandler 中使用 @ExceptionHandler 方法针对特定类型的异常进行处理,返回定制的错误信息。

  4. HTTP 状态码
    通过 ResponseEntity 返回异常时,可以根据异常的性质设置合适的 HTTP 状态码,如 HttpStatus.BAD_REQUEST(400)、HttpStatus.NOT_FOUND(404)、HttpStatus.INTERNAL_SERVER_ERROR(500)等。

  5. 国际化异常信息
    若需要支持多语言的异常消息,可以引入国际化支持,从资源文件中读取异常信息,以适应不同语言环境的用户。

通过上述方法,可以构建一套完整且优雅的全局异常处理机制,使程序在遇到异常时能够提供统一且友好的错误响应格式,同时便于后期维护和扩展。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小蓝xlanll/article/detail/499760
推荐阅读
相关标签
  

闽ICP备14008679号