2023年11月29日发(作者:)
springboot实现全局异常处理及⾃定义异常类
⽬录
全局异常处理及⾃定义异常类
全局异常处理
定义⼀个业务异常的枚举
全局异常处理配置
springbootRestful使⽤
springboot返回ModelAndView
全局异常处理及⾃定义异常类
全局异常处理
定义⼀个处理类,使⽤@ControllerAdvice注解。
@ControllerAdvice注解:控制器增强,⼀个被@Component注册的组件。
配合@ExceptionHandler来增强所有的@requestMapping⽅法。
例如:@ExceptionHandler() ⽤来捕获@requestMapping的⽅法中所有抛出的exception。
代码:
@ControllerAdvice
public class GlobalDefultExceptionHandler {
//声明要捕获的异常
@ExceptionHandler()
@ResponseBody
public String defultExcepitonHandler(HttpServletRequest request,Exception e) {
return “error”;
}
}
这样,全局异常处理类完毕。可以添加⾃⼰的逻辑。
然后还有⼀个问题,有的时候,我们需要业务逻辑时抛出⾃定义异常,这个时候需要⾃定义业务异常类。
定义class:BusinessException ,使他继承于RuntimeException.
说明:因为某些业务需要进⾏业务回滚。但spring的事务只针对RuntimeException的进⾏回滚操作。所以需要回滚就要继承
RuntimeException。
public class BusinessException extends RuntimeException{
}
然后,现在来稍微完善⼀下这个类。
当我们抛出⼀个业务异常,⼀般需要错误码和错误信息。有助于我们来定位问题。
所以如下:
public class BusinessException extends RuntimeException{
//⾃定义错误码
private Integer code;
}
这时候,我们发现还有⼀个问题,如果这样写,在代码多起来以后,很难管理这些业务异常和错误码之间的匹配。所以在优化
⼀下。
把错误码及错误信息,组装起来统⼀管理。
定义⼀个业务异常的枚举
public enum ResultEnum {
UNKONW_ERROR(-1,"未知错误"),
SUCCESS(0,"成功"),
ERROR(1,"失败"),
;
private Integer code;
private String msg;
ResultEnum(Integer code,String msg) {
= code;
= msg;
}
springboot Restful使⽤
@ControllerAdvice、@ExceptionHandler、@ResponseBody实现全局异常处理
@ControllerAdvice
注解定义全局异常处理类
@ExceptionHandler
指定⾃定义错误处理⽅法拦截的异常类型
同⼀个异常被⼩范围的异常类和⼤范围的异常处理器同时覆盖,会选择⼩范围的异常处理器
1.定义异常业务类
/**
* 异常VO
*
* @date 2017年2⽉17⽇
* @since 1.0.0
*/
public class ExceptionVO {
private String errorCode;
private String message;
public String getMessage() {
return message;
}
public SystemException(Object errorCode, String message, Throwable cause) {
super(message, cause);
ode = errorCode;
}
public SystemException(Object errorCode, String message) {
super(message);
ode = errorCode;
}
public SystemException(Object errorCode, String message, Object[] args, Throwable cause) {
super(message, cause);
= args;
ode = errorCode;
}
public SystemException(Object errorCode, String message, Object[] args) {
return vo;
}
@ExceptionHandler()
@ResponseStatus(CT)


发布评论