项目使用 GlobalExceptionHandler 自定义异常 一

简介: 项目使用 GlobalExceptionHandler 自定义异常 一

博主原创,未经允许不得转载:

每个项目都有自己的一套异常类的定义。总结一下,项目中使用自定义异常比较好的封装。

  1.定义项目中统一使用的异常类,用于捕获项目中的自定义异常等:

package com.common;
/**
 * 自定义异常
*/
public class CustomException extends Exception {
    private static final long serialVersionUID = 8984728932846627819L;
    public CustomException() {
        super();
    }
    
    public CustomException(String message, Throwable cause, boolean enableSuppression, boolean writableStackTrace) {
        super(message, cause, enableSuppression, writableStackTrace);
    }
    /**
     * @param message
     * @param cause
     */
    public CustomException(String message, Throwable cause) {
        super(message, cause);
    }
    /**
     * @param message
     */
    public CustomException(String message) {
        super(message);
    }
    /**
     * @param cause
     */
    public CustomException(Throwable cause) {
        super(cause);
    }
}

2.定义异常捕获后返回给客户端的统一数据格式的实体类:

@Data
public class ErrorResult{
    // 错误码
    private Integer errorCode;
    
    // 错误描述
    private String errorMsg;
}

 

3.使用 @RestControllerAdvice注解,自定义异常捕获的基类,处理和封装捕获的异常信息。

看 @RestControllerAdvice 源码可以知道,它就是@ControllerAdvice和@ResponseBody的合并。此注解通过对异常的拦截实现的统一异常返回处理。

它通常用于定义@ExceptionHandler, @InitBinder 和 @ModelAttribute 适用于所有@RequestMapping方法的方法。

创建一个 GlobalExceptionHandler 类,并添加上 @RestControllerAdvice 注解就可以定义出异常通知类了,然后在定义的方法中添加上 @ExceptionHandler 即可实现异常的捕捉

import com.baizhi.exception.CustomException;
import com.baizhi.exception.ErrorResult;
import org.springframework.http.HttpHeaders;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.MethodArgumentNotValidException;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.RestControllerAdvice;
import org.springframework.web.context.request.WebRequest;
import org.springframework.web.method.annotation.MethodArgumentTypeMismatchException;
 
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
 
@RestControllerAdvice
public class GlobalExceptionHandler{
    /**
     * 定义要捕获的异常 可以多个 @ExceptionHandler({})
     *
     * @param request  request
     * @param e        exception
     * @param response response
     * @return 响应结果
     */
    @ExceptionHandler(CustomException.class)
    public ErrorResult customExceptionHandler(HttpServletRequest request, final Exception e, HttpServletResponse response) {
        response.setStatus(HttpStatus.BAD_REQUEST.value());
        CustomException exception = (CustomException) e;
        return new ErrorResult(exception.getCode(), exception.getMessage());
    }
 
    /**
     * 捕获  RuntimeException 异常
     * TODO  如果你觉得在一个 exceptionHandler 通过  if (e instanceof xxxException) 太麻烦
     * TODO  那么你还可以自己写多个不同的 exceptionHandler 处理不同异常
     *
     * @param request  request
     * @param e        exception
     * @param response response
     * @return 响应结果
     */
    @ExceptionHandler(RuntimeException.class)
    public ErrorResult runtimeExceptionHandler(HttpServletRequest request, final Exception e, HttpServletResponse response) {
        response.setStatus(HttpStatus.BAD_REQUEST.value());
        RuntimeException exception = (RuntimeException) e;
        return new ErrorResult(400, exception.getMessage());
    }
}

标签: spring boot

目录
相关文章
|
C++
65 C++ - 自定义异常
65 C++ - 自定义异常
47 0
|
Java
JavaSE 异常之自定义异常
JavaSE 异常之自定义异常
54 0
|
4月前
|
前端开发 Java Spring
项目使用 GlobalExceptionHandler 与 @RestControllerAdvice自定义异常 二
项目使用 GlobalExceptionHandler 与 @RestControllerAdvice自定义异常 二
46 3
|
5月前
|
前端开发 算法 Java
JavaEE开发重中之重 异常 捕获并抛出异常 自定义异常 2024详解
JavaEE开发重中之重 异常 捕获并抛出异常 自定义异常 2024详解
27 1
|
6月前
|
Java
自定义异常类
自定义异常类
33 0
|
6月前
|
SQL 缓存 安全
【C++入门到精通】异常 | 异常的使用 | 自定义异常体系 [ C++入门 ]
【C++入门到精通】异常 | 异常的使用 | 自定义异常体系 [ C++入门 ]
54 2
|
Java
如何自定义异常类
如何自定义异常类
51 0
|
Java
异常的处理和自定义异常
在Java中,异常(Exception)是指程序在运行过程中遇到的错误或异常情况。Java提供了异常处理机制,可以捕获和处理异常,使程序在遇到异常时能够继续执行或进行相应的处理。 异常处理的基本结构是try-catch语句块。在try块中编写可能抛出异常的代码,如果在try块中抛出了异常,那么程序会跳转到catch块中执行相应的异常处理代码。 以下是一个简单的异常处理的示例: ```java try { // 可能抛出异常的代码 int result = 10 / 0; } catch (ArithmeticException e) { // 异常处理代码
59 0
|
SQL 数据安全/隐私保护
异常处理与自定义异常
异常处理与自定义异常
58 0
|
安全 Java 微服务
SpringBoot 中如何优雅地处理异常,包括异常处理机制、全局异常处理器、自定义异常?
SpringBoot 中如何优雅地处理异常,包括异常处理机制、全局异常处理器、自定义异常?
306 0