赞
踩
什么是异常:程序执行过程中的不正常情况。
异常的作用:增强程序的 健壮性。
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!--lombok用来简化实体类:需要安装lombok插件-->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</dependency>
import org.springframework.http.HttpStatus; import java.util.HashMap; /** * 数据结果封装体 AjaxResult * * @author 赵强 */ public class AjaxResult extends HashMap<String, Object> { private static final long serialVersionUID = 1L; /** 状态码 */ public static final String CODE_TAG = "code"; /** 返回内容 */ public static final String MSG_TAG = "msg"; /** 数据对象 */ public static final String DATA_TAG = "data"; /** * 初始化一个AjaxResult 对象 */ public AjaxResult() { } /** * 初始化一个AjaxResult 对象 * * @param code 状态码 * @param msg 返回内容 */ public AjaxResult(int code, String msg) { super.put(CODE_TAG, code); super.put(MSG_TAG, msg); } /** * 初始化一个AjaxResult 对象 * * @param code 状态码 * @param msg 返回内容 * @param data 数据对象 */ public AjaxResult(int code, String msg, Object data) { super.put(CODE_TAG, code); super.put(MSG_TAG, msg); if (!(data == null)) { super.put(DATA_TAG, data); } } /** * 返回默认成功消息 * * @return 成功消息 */ public static AjaxResult success() { return AjaxResult.success("操作成功"); } /** * 返回成功消息 * * @param msg 返回内容 * @return 成功消息 */ public static AjaxResult success(String msg) { return AjaxResult.success(msg, null); } /** * 返回成功数据 * @param data 数据对象 * @return */ public static AjaxResult success(Object data) { return AjaxResult.success("操作成功", data); } /** * 初始化一个返回成功消息AjaxResult对象 * * @param msg 返回内容 * @param data 数据对象 * @return 成功消息 */ public static AjaxResult success(String msg, Object data) { return new AjaxResult(HttpStatus.valueOf(200).value(), msg, data); } /** * 返回默认错误消息 * * @return */ public static AjaxResult error() { return AjaxResult.error("操作失败"); } /** * 返回错误消息 * * @param msg 返回内容 * @return 警告消息 */ public static AjaxResult error(String msg) { return AjaxResult.error(msg, null); } /** * 返回错误数据 * * @param code 状态码 * @param msg 返回内容 * @return 警告消息 */ public static AjaxResult error(int code, String msg) { return new AjaxResult(code, msg, null); } /** * 初始化一个返回错误消息AjaxResult对象 * * @param msg 返回内容 * @param data 数据对象 * @return 警告消息 */ public static AjaxResult error(String msg, Object data) { return new AjaxResult(HttpStatus.valueOf(500).value(), msg, data); } }
import lombok.AllArgsConstructor; import lombok.Getter; import lombok.ToString; @Getter @AllArgsConstructor @ToString public enum ResponseEnum { SUCCESS(0, "成功"), ERROR(-1, "服务器内部错误"), //-1xx 服务器错误 BAD_SQL_GRAMMAR_ERROR(-101, "sql语法错误"), SERVLET_ERROR(-102, "servlet请求异常"), //-2xx 参数校验 UPLOAD_ERROR(-103, "文件上传错误"), EXPORT_DATA_ERROR(104, "数据导出失败"), //-2xx 参数校验 BORROW_AMOUNT_NULL_ERROR(-201, "借款额度不能为空"), MOBILE_NULL_ERROR(-202, "手机号码不能为空"), MOBILE_ERROR(-203, "手机号码不正确"), PASSWORD_NULL_ERROR(204, "密码不能为空"), CODE_NULL_ERROR(205, "验证码不能为空"), CODE_ERROR(206, "验证码错误"), MOBILE_EXIST_ERROR(207, "手机号已被注册"), LOGIN_MOBILE_ERROR(208, "用户不存在"), LOGIN_PASSWORD_ERROR(209, "密码错误"), LOGIN_LOKED_ERROR(210, "用户被锁定"), LOGIN_AUTH_ERROR(-211, "未登录"), USER_BIND_IDCARD_EXIST_ERROR(-301, "身份证号码已绑定"), USER_NO_BIND_ERROR(302, "用户未绑定"), USER_NO_AMOUNT_ERROR(303, "用户信息未审核"), USER_AMOUNT_LESS_ERROR(304, "您的借款额度不足"), LEND_INVEST_ERROR(305, "当前状态无法投标"), LEND_FULL_SCALE_ERROR(306, "已满标,无法投标"), NOT_SUFFICIENT_FUNDS_ERROR(307, "余额不足"), PAY_UNIFIEDORDER_ERROR(401, "统一下单错误"), ALIYUN_RESPONSE_ERROR(-501, "阿里云短信服务响应失败"), ALIYUN_SMS_LIMIT_CONTROL_ERROR(-502, "短信发送过于频繁"),//业务限流 ALIYUN_SMS_ERROR(-503, "短信发送失败"),//其他失败 WEIXIN_CALLBACK_PARAM_ERROR(-601, "回调参数不正确"), WEIXIN_FETCH_ACCESSTOKEN_ERROR(-602, "获取access_token失败"), WEIXIN_FETCH_USERINFO_ERROR(-603, "获取用户信息失败"), ; //响应状态码 private Integer code; //响应信息 private String message; }
@RestControllerAdvice @Slf4j public class UnifiedExceptionHandler { /** * 系统异常 */ @ExceptionHandler(value = Exception.class) public AjaxResult handlerException(Exception e){ log.error("系统异常:", e); return AjaxResult.error("操作异常",e.getMessage()); } /** * 拦截未知的运行时异常 */ @ExceptionHandler(RuntimeException.class) public AjaxResult notFount(RuntimeException e) { log.error("运行时异常:", e); return AjaxResult.error("运行时异常:" + e.getMessage()); } /** * 请求方式不支持 */ @ExceptionHandler({ HttpRequestMethodNotSupportedException.class }) public AjaxResult handleException(HttpRequestMethodNotSupportedException e) { log.error("请求方式不支持异常:", e); return AjaxResult.error("不支持' " + e.getMethod() + "'请求"); } /** * 定义的Sql语句异常 * @param e * @return */ @ExceptionHandler(value = BadSqlGrammarException.class) //当controller中抛出Exception,则捕获 public AjaxResult HandleException(BadSqlGrammarException e) { log.error(e.getMessage(), e); return AjaxResult.error(-101,"sql语法错误"); } /** * 自定义异常 * @param e * @return */ @ExceptionHandler(value = BusinessException.class) public AjaxResult handlerException(BusinessException e){ log.error("自定义验证异常", e); return AjaxResult.error(e.getCode(),e.getMessage()); } }
import lombok.Data; import lombok.NoArgsConstructor; @Data @NoArgsConstructor public class BusinessException extends RuntimeException{ //错误码 private Integer code; //错误消息 private String message; /** * * @param message 错误消息 */ public BusinessException(String message) { this.message = message; } /** * * @param message 错误消息 * @param code 错误码 */ public BusinessException(String message, Integer code) { this.message = message; this.code = code; } /** * * @param message 错误消息 * @param code 错误码 * @param cause 原始异常对象 */ public BusinessException(String message, Integer code, Throwable cause) { super(cause); this.message = message; this.code = code; } /** * * @param resultCodeEnum 接收枚举类型 */ public BusinessException(ResponseEnum resultCodeEnum) { this.message = resultCodeEnum.getMessage(); this.code = resultCodeEnum.getCode(); } /** * * @param resultCodeEnum 接收枚举类型 * @param cause 原始异常对象 */ public BusinessException(ResponseEnum resultCodeEnum, Throwable cause) { super(cause); this.message = resultCodeEnum.getMessage(); this.code = resultCodeEnum.getCode(); } }
##断言工具类
import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; @Slf4j public class AssertUtils { /** * 断言对象不能为空 * 如果对象 obj 为空,则抛出异常 * @param obj 待判断对象 * @param responseEnum */ public static void notNull(Object obj, ResponseEnum responseEnum) { if (obj == null) { log.info("obj is null ======"); throw new BusinessException(responseEnum); } } /** * 断言对象为空 * 如果对象obj不为空,则抛出异常 * @param object * @param responseEnum */ public static void isNull(Object object, ResponseEnum responseEnum) { if (object != null) { log.info("obj is not null......"); throw new BusinessException(responseEnum); } } /** * 断言表达式为真 * 如果不为真,则抛出异常 * * @param expression 是否成功 */ public static void isTrue(boolean expression, ResponseEnum responseEnum) { if (!expression) { log.info("fail..............."); throw new BusinessException(responseEnum); } } /** * 断言两个对象不相等 * 如果相等,则抛出异常 * @param m1 * @param m2 * @param responseEnum */ public static void notEquals(Object m1, Object m2, ResponseEnum responseEnum) { if (m1.equals(m2)) { log.info("equals..............."); throw new BusinessException(responseEnum); } } /** * 断言两个对象相等 * 如果不相等,则抛出异常 * @param m1 * @param m2 * @param responseEnum */ public static void equals(Object m1, Object m2, ResponseEnum responseEnum) { if (!m1.equals(m2)) { log.info("not equals..............."); throw new BusinessException(responseEnum); } } /** * 断言参数不为空 * 如果为空,则抛出异常 * @param s * @param responseEnum */ public static void notEmpty(String s, ResponseEnum responseEnum) { if (StringUtils.isEmpty(s)) { log.info("is empty..............."); throw new BusinessException(responseEnum); } } }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。