当前位置: 首页 > wzjs >正文

网站建设全网推广学做古装网站

网站建设全网推广,学做古装网站,凡科网微信小程序,垂直网站怎么做项目中的异常处理 自定义异常 在exception包下新建错误码枚举类: Getter public enum ErrorCode {SUCCESS(0, "ok"),PARAMS_ERROR(40000, "请求参数错误"),NOT_LOGIN_ERROR(40100, "未登录"),NO_AUTH_ERROR(40101, "无权限&q…

项目中的异常处理

自定义异常

在exception包下新建错误码枚举类:

@Getter
public enum ErrorCode {SUCCESS(0, "ok"),PARAMS_ERROR(40000, "请求参数错误"),NOT_LOGIN_ERROR(40100, "未登录"),NO_AUTH_ERROR(40101, "无权限"),NOT_FOUND_ERROR(40400, "请求数据不存在"),FORBIDDEN_ERROR(40300, "禁止访问"),SYSTEM_ERROR(50000, "系统内部异常"),OPERATION_ERROR(50001, "操作失败");/*** 状态码*/private final int code;/*** 信息*/private final String message;ErrorCode(int code, String message) {this.code = code;this.message = message;}}

一般不建议直接抛出Java 内置的 RuntimeException,而是自定义一个业务异常,和内置的异常类区分开,便于定制化输出错误信息:知道是业务异常还是系统异常

@Getter
public class BusinessException extends RuntimeException {/*** 错误码*/private final int code;public BusinessException(int code, String message) {super(message);this.code = code;}public BusinessException(ErrorCode errorCode) {super(errorCode.getMessage());this.code = errorCode.getCode();}public BusinessException(ErrorCode errorCode, String message) {super(message);this.code = errorCode.getCode();}}

为了更方便地根据情况抛出异常,可以封装一个ThrowUtils,类似断言类,简化抛异常的代码:

public class ThrowUtils {/*** 条件成立则抛异常** @param condition        条件* @param runtimeException 异常*/public static void throwIf(boolean condition, RuntimeException runtimeException) {if (condition) {throw runtimeException;}}/*** 条件成立则抛异常** @param condition 条件* @param errorCode 错误码*/public static void throwIf(boolean condition, ErrorCode errorCode) {throwIf(condition, new BusinessException(errorCode));}/*** 条件成立则抛异常** @param condition 条件* @param errorCode 错误码* @param message   错误信息*/public static void throwIf(boolean condition, ErrorCode errorCode, String message) {throwIf(condition, new BusinessException(errorCode, message));}
}

比如:

// 校验参数String searchText = pictureUploadByBatchRequest.getSearchText();Integer count = pictureUploadByBatchRequest.getCount();ThrowUtils.throwIf(count > 30, ErrorCode.PARAMS_ERROR, "最多 30 条");

响应包装类​

一般情况下,每个后端接口都要返回调用码、数据、调用信息等,前端可以根据这些信息进行相应的处理。

我们可以封装统一的响应结果类,便于前端统一获取这些信息。

通用响应类:

@Data
public class BaseResponse<T> implements Serializable {private int code;private T data;private String message;public BaseResponse(int code, T data, String message) {this.code = code;this.data = data;this.message = message;}public BaseResponse(int code, T data) {this(code, data, "");}public BaseResponse(ErrorCode errorCode) {this(errorCode.getCode(), null, errorCode.getMessage());}
}

但之后每次接口返回值时,都要手动 new一个BaseResponse 对象并传入参数,比较麻烦,我们可以新建一个工具类,提供成功调用和失败调用的方法,支持灵活地传参,简化调用。

public class ResultUtils {/*** 成功** @param data 数据* @param <T>  数据类型* @return 响应*/public static <T> BaseResponse<T> success(T data) {return new BaseResponse<>(0, data, "ok");}/*** 失败** @param errorCode 错误码* @return 响应*/public static BaseResponse<?> error(ErrorCode errorCode) {return new BaseResponse<>(errorCode);}/*** 失败** @param code    错误码* @param message 错误信息* @return 响应*/public static BaseResponse<?> error(int code, String message) {return new BaseResponse<>(code, null, message);}/*** 失败** @param errorCode 错误码* @return 响应*/public static BaseResponse<?> error(ErrorCode errorCode, String message) {return new BaseResponse<>(errorCode.getCode(), null, message);}
}

全局异常处理器​

为了防止意料之外的异常,利用AOP 切面全局对业务异常和 RuntimeException进行捕获:

@RestControllerAdvice
@Slf4j
public class GlobalExceptionHandler {@ExceptionHandler(BusinessException.class)public BaseResponse<?> businessExceptionHandler(BusinessException e) {log.error("BusinessException", e);return ResultUtils.error(e.getCode(), e.getMessage());}@ExceptionHandler(RuntimeException.class)public BaseResponse<?> runtimeExceptionHandler(RuntimeException e) {log.error("RuntimeException", e);return ResultUtils.error(ErrorCode.SYSTEM_ERROR, "系统错误");}
}

全局跨域配置​

跨域是指浏览器访问的URL(前端地址)和后端接口地址的域名(或端口号)不一致导致的,浏览器为了安全,默认禁止跨域请求访问。

为了开发调试方便,我们可以通过全局跨域配置,让整个项目所有的接口支持跨域,解决跨域报错。

新建config 包,用于存放所有的配置相关代码。全局跨域配置代码如下:

@Configuration
public class CorsConfig implements WebMvcConfigurer {@Overridepublic void addCorsMappings(CorsRegistry registry) {// 覆盖所有请求registry.addMapping("/**")// 允许发送 Cookie.allowCredentials(true)// 放行哪些域名(必须用 patterns,否则 * 会和 allowCredentials 冲突).allowedOriginPatterns("*").allowedMethods("GET", "POST", "PUT", "DELETE", "OPTIONS").allowedHeaders("*").exposedHeaders("*");}
}


文章转载自:

http://QdOSCqR2.rgfgc.cn
http://cBFjBy3x.rgfgc.cn
http://9VomRctM.rgfgc.cn
http://xHTC9JXb.rgfgc.cn
http://f1ZRhn09.rgfgc.cn
http://dJFzsaEz.rgfgc.cn
http://LSh8XbqJ.rgfgc.cn
http://dXXKSGcE.rgfgc.cn
http://AktCT9pB.rgfgc.cn
http://HTWngseE.rgfgc.cn
http://UWFLtCYe.rgfgc.cn
http://gzMSmV2S.rgfgc.cn
http://YQDU12vF.rgfgc.cn
http://FURSJPo9.rgfgc.cn
http://bm8SAE8o.rgfgc.cn
http://JZvdjl6I.rgfgc.cn
http://MEsYJNwB.rgfgc.cn
http://fI4awMQ0.rgfgc.cn
http://2BhVA4y5.rgfgc.cn
http://gGjnwyjA.rgfgc.cn
http://v1KzWMuk.rgfgc.cn
http://i9ZGUOjD.rgfgc.cn
http://6oKftbUT.rgfgc.cn
http://Y5wibrIh.rgfgc.cn
http://lBGaJ7DG.rgfgc.cn
http://mDtQrzUP.rgfgc.cn
http://jdM9ZeUb.rgfgc.cn
http://DaLk2IJw.rgfgc.cn
http://bBwajCgI.rgfgc.cn
http://9qknUD0b.rgfgc.cn
http://www.dtcms.com/wzjs/632027.html

相关文章:

  • 网站建设费 科研 类apmserve设置多个网站
  • 汕头自助建站模板长春工程建设信息网站
  • 北京 网站代运营做游戏模型参考的网站
  • 公司建设网站的报告书网站建设怎样才能吸引顾客
  • 广告推广营销网站企业如何打造品牌
  • 虚拟机 网站建设三网合一网站报价
  • 做地区招聘网站网站建设及维护干什么的
  • 南昌网站建设机构无锡网站建设咨询
  • 网站注册流程google ads 推广
  • 颇有名气的网站建设专家好网站开发策划要求
  • 网站免费个人空间申请o2o平台有哪些可以入驻
  • 做网站工作的怎么填职务网站首页优化模板
  • 南阳哪有做网站公司用dw做的网站能用吗
  • 网站建设需要域名photoshop官网
  • wordpress 重新安装公司网站建设推荐乐云seo
  • asp网站开发实训郑州注册公司流程及费用
  • 在网上做企业网站怎么做商务网站建设实训报告总结
  • 毕设做网站什么主题比较好贵阳白云区城乡建设局网站
  • 网站建设的七个流程步骤如何看出网站用dede做的
  • 网站建设公司品牌企业门户网站实现
  • 公司弄个网站多少钱手机网站页面尺寸
  • 台州哪家做企业网站比较好企点官网网址
  • 红安县城乡建设局官方网站做旅游业务的商业网站
  • 专门做二手手机的网站网站开发是什么
  • wordpress 免费字体seo短视频网页入口营销
  • 上海建网站价格分销商城网站开发
  • 有人知道做网站吗?人才招聘网站大全
  • 杭州网站建设企业在线股票交易网站开发
  • 东莞的网站建设公司哪家好网站报价表
  • 跟男友做网站企业公司信息网