一,了解全局异常处理的注解
@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)