SpringBoot全局异常处理机制

618 阅读1分钟

一,了解全局异常处理的注解

@ControllerAdvice

表示全局异常处理机制类,当抛出异常时,自动跳转到该类中被 @ExceptionHandler() 注解的方法里。

@ExceptionHandler(value = Exception.class) 表示未知异常跳转的方法。 @ExceptionHandler(HttpException.class) 表示自定义(即已知)异常跳转的方法。

二,自定义异常类

由于全局异常处理机制的作用:1是提醒前端异常信息,2是便于将异常信息分类。

因此,会将不同类型的异常进行自定义。

1,首先自定义一个HttpException类

public class HttpException extends RuntimeException {
    protected Integer code;
    protected Integer httpStatusCode = 500;
    public Integer getCode() {
           return code;
    }
    public Integer getHttpStatusCode() {
           return httpStatusCode;
    }
}

2,不同类型的异常将继承此类

如: NotFoundException ,ForbiddenException 等。

每一个异常类都有二个属性,即code,httpStatusCode。

code : 用于与配置文件.properties中的异常信息key-value匹配,以便在处理异常时根据code获取要返回前端的异常信息。

httpStatus :一般会设置默认值,根据异常类型而定。

三,自定义异常类的处理逻辑

1,从 HttpServletRequest 对象中获取请求url和请求method,并根据code从.properties文件中获取对应异常message,最后用自定义的 UnifyResponse 保存好以上三个数据。

2,新建一个 HttpHeaders 对象,并设置

headers.setContentType(MediaType.APPLICATION_JSON);

3,设置HttpStatus,e是异常类对象

HttpStatus status = HttpStatus.resolve(e.getHttpStatusCode());

4,最后 封装,用于返回

ResponseEntity<UnifyResponse> r = new ResponseEntity<>(message,headers,status)