全局异常处理和自定义异常

下面为作者在学习过程中,全局异常处理和自定义全局异常的操作步骤,记录分享给大家,可能有所不足(还望包含)

全局统一返回结果类

/**
 * 全局统一返回结果类
 * <p>
 * 创建时间: 2022-02-09 14:51
 *
 * @author fuxshen
 * @version v1.0.0
 * @since v1.0.0
 */
@Data
@ApiModel(value = "全局统一返回结果")
public class Result<T> {
    
    

	@ApiModelProperty(value = "返回码")
	private Integer code;

	@ApiModelProperty(value = "返回消息")
	private String message;

	@ApiModelProperty(value = "返回数据")
	private T data;

	public Result(){
    
    }

	protected static <T> Result<T> build(T data) {
    
    
		Result<T> result = new Result<T>();
		if (data != null)
			result.setData(data);
		return result;
	}

	public static <T> Result<T> build(T body, ResultCodeEnum resultCodeEnum) {
    
    
		Result<T> result = build(body);
		result.setCode(resultCodeEnum.getCode());
		result.setMessage(resultCodeEnum.getMessage());
		return result;
	}

	public static <T> Result<T> build(Integer code, String message) {
    
    
		Result<T> result = build(null);
		result.setCode(code);
		result.setMessage(message);
		return result;
	}

	public static<T> Result<T> success(){
    
    
		return Result.success(null);
	}

	/**
	 * 操作成功
	 * @param data
	 * @param <T>
	 * @return
	 */
	public static<T> Result<T> success(T data){
    
    
		Result<T> result = build(data);
		return build(data, ResultCodeEnum.SUCCESS);
	}

	public static<T> Result<T> fail(){
    
    
		return Result.fail(null);
	}

	/**
	 * 操作失败
	 * @param data
	 * @param <T>
	 * @return
	 */
	public static<T> Result<T> fail(T data){
    
    
		Result<T> result = build(data);
		return build(data, ResultCodeEnum.FAIL);
	}

	public Result<T> message(String msg){
    
    
		this.setMessage(msg);
		return this;
	}

	public Result<T> code(Integer code){
    
    
		this.setCode(code);
		return this;
	}

	public boolean isSuccess() {
    
    
		if(this.getCode().intValue() == ResultCodeEnum.SUCCESS.getCode().intValue()) {
    
    
			return true;
		}
		return false;
	}



}

返回结果状态信息枚举
此处枚举可以根据业务情况自行定义

/**
 * 统一返回结果状态信息枚举
 * <p>
 * 创建时间: 2022-02-09 14:50
 *
 * @author fuxshen
 * @version v1.0.0
 * @since v1.0.0
 */
@Getter
public enum  ResultCodeEnum {
    
    
	SUCCESS(200,"成功"),
	FAIL(201, "失败"),
	PARAM_ERROR( 202, "参数不正确"),
	SERVICE_ERROR(203, "服务异常"),
	DATA_ERROR(204, "数据异常"),
	DATA_UPDATE_ERROR(205, "数据版本异常"),

	LOGIN_AUTH(208, "未登陆"),
	PERMISSION(209, "没有权限"),

	CODE_ERROR(210, "验证码错误"),
	//    LOGIN_MOBLE_ERROR(211, "账号不正确"),
	LOGIN_DISABLED_ERROR(212, "改用户已被禁用"),
	REGISTER_MOBLE_ERROR(213, "手机号已被使用"),
	LOGIN_AURH(214, "需要登录"),
	LOGIN_ACL(215, "没有权限"),

	URL_ENCODE_ERROR( 216, "URL编码失败"),
	ILLEGAL_CALLBACK_REQUEST_ERROR( 217, "非法回调请求"),
	FETCH_ACCESSTOKEN_FAILD( 218, "获取accessToken失败"),
	FETCH_USERINFO_ERROR( 219, "获取用户信息失败"),
	//LOGIN_ERROR( 23005, "登录失败"),

	PAY_RUN(220, "支付中"),
	CANCEL_ORDER_FAIL(225, "取消订单失败"),
	CANCEL_ORDER_NO(225, "不能取消预约"),

	HOSCODE_EXIST(230, "医院编号已经存在"),
	NUMBER_NO(240, "可预约号不足"),
	TIME_NO(250, "当前时间不可以预约"),

	SIGN_ERROR(300, "签名错误"),
	HOSPITAL_OPEN(310, "医院未开通,暂时不能访问"),
	HOSPITAL_LOCK(320, "医院被锁定,暂时不能访问"),
	;

	private Integer code;
	private String message;

	private ResultCodeEnum(Integer code, String message) {
    
    
		this.code = code;
		this.message = message;
	}
}

全局异常处理

/**
 * 全局异常处理
 * <p>
 * 创建时间: 2022-02-09 20:23
 *
 * @author fuxshen
 * @version v1.0.0
 * @since v1.0.0
 */
@ControllerAdvice
public class GlobalExceptionHandler {
    
    

	/**
	 * 全局异常处理(所有异常都执行)
	 *
	 * @param e
	 * @return com.it.yygh.common.result.Result
	 * @Description
	 * @author fuxshen
	 * @date 2022-02-09 20:35:56
	 **/
	@ExceptionHandler(Exception.class)
	@ResponseBody
	public Result error(Exception e) {
    
    
		e.printStackTrace();
		return Result.fail();
	}


	/**
	 * 自定义异常处理(只有特定的地方会执行)
	 *
	 * @param e
	 * @return com.it.yygh.common.result.Result
	 * @Description
	 * @author fuxshen
	 * @date 2022-02-09 20:38:18
	 **/
	@ExceptionHandler(HospitalException.class)
	public Result error(HospitalException e) {
    
    
		e.printStackTrace();
		return Result.fail();
	}

}

自定义异常

@Data
@ApiModel(value = "自定义全局异常类")
public class HospitalException extends RuntimeException {
    
    

    @ApiModelProperty(value = "异常状态码")
    private Integer code;

    /**
     * 通过状态码和错误消息创建异常对象
     * @param message
     * @param code
     */
    public HospitalException(String message, Integer code) {
    
    
        super(message);
        this.code = code;
    }

    /**
     * 接收枚举类型对象
     * @param resultCodeEnum
     */
    public HospitalException(ResultCodeEnum resultCodeEnum) {
    
    
        super(resultCodeEnum.getMessage());
        this.code = resultCodeEnum.getCode();
    }

    @Override
    public String toString() {
    
    
        return "HospitalException{" +
                "code=" + code +
                ", message=" + this.getMessage() +
                '}';
    }
}

猜你喜欢

转载自blog.csdn.net/qq_51726114/article/details/123614296