在开发中出现异常后,可能需要一个统一处理的地方,来处理程序出现的异常,针对不同的异常做不同的处理,这里我们通过@ExceptionHandler注解来实现。
1.自定义异常
/**
* 系统异常,自定义
*
*/
public class BusinessException extends RuntimeException {
private int code;
/**
* 继承exception,加入错误状态值
*
* @param resultCode 错误码枚举类
*/
public BusinessException(ResponseStatusCode resultCode) {
super(resultCode.getMessage());
}
public BusinessException(ResponseStatusCode resultCode, String msg) {
super(resultCode.getMessage() + "," + msg);
this.code = resultCode.getCode();
}
/**
* 自定义错误信息
*
* @param message 异常信息
*/
public BusinessException(String message) {
super(message);
}
/**
* 自定义错误信息
*
* @param code 异常码
* @param message 异常信息
*/
public BusinessException(int code, String message) {
super(message);
this.code = code;
}
public BusinessException(int code, String message, Throwable cause) {
super(message, cause);
this.code = code;
}
public int getCode() {
return code;
}
public void setCode(int code) {
this.code = code;
}
}
2.自定义全局异常
/**
* 全局异常处理
*
*/
@Slf4j
@RestControllerAdvice
public class GlobalExceptionHandler {
/**
* 系统内部异常
*
* @param e Exception
* @return Result
*/
@ExceptionHandler(value = Exception.class)
@ResponseStatus(HttpStatus.INTERNAL_SERVER_ERROR)
public Result handleException(Exception e) {
log.error("系统内部异常,异常信息:", e);
return ResultFactory.failed("系统异常,请联系管理人员", null);
}
/**
* 自定义异常
*
* @param e BusinessException
* @return Result
*/
@ExceptionHandler(value = BusinessException.class)
@ResponseStatus(HttpStatus.OK)
public Result businessException(BusinessException e) {
log.error("业务异常:{}", e);
return ResultFactory.create(e.getCode(),e.getMessage(), null);
}
@ExceptionHandler(MaxUploadSizeExceededException.class)
@ResponseStatus(HttpStatus.INTERNAL_SERVER_ERROR)
public Result uploadException(MaxUploadSizeExceededException e) throws IOException {
log.error("文件上传异常,上传数据过大:{}", e);
return ResultFactory.create(ResponseStatusCode.INVALID_ARGUMENT.getCode(),"文件上传限制大小为10MB", null);
}
}
3.调用方法
private void validateRepeatRouteId(String id) {
int count = gatewayRouteMapper.count(id);
if (count >= 1) {
//调用方法
throw new BusinessException(ResponseStatusCode.INVALID_ARGUMENT, "路由id重复");
}
}