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

83、SpringMVC全局异常处理和数据校验

1、首先定义一个自定义的异常类
@Data
public class BizException extends RuntimeException {private Integer code; //业务异常码private String msg; //业务异常信息public BizException(Integer code, String message) {super(message);this.code = code;this.msg = message;}public BizException(BizExceptionEnume exceptionEnume) {super(exceptionEnume.getMsg());this.code = exceptionEnume.getCode();this.msg = exceptionEnume.getMsg();}
}

2、定义一个异常枚举类

public enum BizExceptionEnume {// ORDER_xxx:订单模块相关异常// 动态扩充.....ID_NOT_NULL(10000,"ID不能为空"),PRODUCT_HAS_CLOSED(20001, "商品已下架");@Getterprivate Integer code;@Getterprivate String msg;private BizExceptionEnume(Integer code, String msg) {this.code = code;this.msg = msg;}
}

3、定义全局异常处理器

@RestControllerAdvice
public class GlobalExceptionHandler {/*** 如果出现了异常:本类和全局都不能处理,* SpringBoot底层对SpringMVC有兜底处理机制;自适应处理(浏览器响应页面、移动端会响应json)* 最佳实践:我们编写全局异常处理器,处理所有异常* <p>* 前端关心异常状态,后端正确业务流程。* 推荐:后端只编写正确的业务逻辑,如果出现业务问题,后端通过抛异常的方式提前中断业务逻辑。前端感知异常;* <p>* 异常处理:* 1、** @param e* @return*/@ExceptionHandler(ArithmeticException.class)public R error(ArithmeticException e) {System.out.println("【全局】 - ArithmeticException 处理");return R.error(500, e.getMessage());}//处理自定义异常@ExceptionHandler(BizException.class)public R handleBizException(BizException e) {Integer code = e.getCode();String msg = e.getMsg();return R.error(code, msg);}@ExceptionHandler(value = MethodArgumentNotValidException.class)public R methodArgumentNotValidException(MethodArgumentNotValidException ex) {//1、result 中封装了所有错误信息BindingResult result = ex.getBindingResult();List<FieldError> errors = result.getFieldErrors();Map<String, String> map = new HashMap<>();for (FieldError error : errors) {String field = error.getField();String message = error.getDefaultMessage();map.put(field, message);}return R.error(500, "参数错误", map);}// 最终的兜底@ExceptionHandler(Throwable.class)public R error(Throwable e) {System.out.println("【全局】 - Exception处理" + e.getClass());return R.error(500, e.getMessage());}

4、如果出现业务异常代码自己以抛出异常的方式写:throw new BizException(BizExceptionEnume.ID_NOT_NULL);

http://www.wxhsa.cn/company.asp?id=235

相关文章:

  • nginx反向代理
  • 微算法科技(NASDAQ: MLGO)基于阿基米德优化算法(AOA)的区块链存储优化方案
  • mysql常用命令
  • WebApi通用获取全量参数,不使用实体
  • 《【插件】2025版PS插件一键安装》
  • Nginx跨越设置
  • 依然是dots的介绍视频
  • 【GitHub每日速递】别再瞎买编程课了!这 2 个免费宝藏,从入门到职业规划全搞定
  • 你的项目一团糟-不是你的错-是框架的锅
  • 数据结构与算法-24.2-3查找树
  • 8 将GitHub远程仓库修改为ssh
  • Symfony学习笔记 - Symfony Documentation - Utilities(1)
  • IPv4向IPv6平滑过渡综合技术方案
  • TIA博图中的常用指令:定时器、计数器和触发器
  • Vue3项目开发专题精讲【左扬精讲】—— 企业网站系统(基于 Vue3 与 TypeScript 技术栈的企业网站系统开发实战)
  • Vue3项目开发专题精讲【左扬精讲】—— 商城网站系统(基于 Vue3 与 TypeScript 技术栈的企业网站系统开发实战)
  • $\LaTeX{}$之快速编译和删除中间文件 - Invinc
  • 我们一起“扒一扒”ReentrantLock:看看锁背后那些精妙的设计
  • win10使用openssl生成证书
  • $\LaTeX{}$之minted使用 - Invinc
  • linux服务器 系统服务文件
  • Codeforces Round 1049 (Div. 2) 部分题解
  • Critical Thinking Academic Writing
  • 1.3 课前问题思考
  • 【知识管理工具分享】基于AI搭建个人法律知识库:我的PandaWiki实践心得
  • 你的中间件一团糟-是时候修复它了-️
  • 超越-env-一份成熟的应用程序配置指南
  • 告别框架臃肿-我如何在不牺牲性能的情况下重新发现简单之美
  • 像元大小(例如 1.4 m 1.4 m)具体的含义和用途
  • Codeforces Round 1049 (Div. 2) 一些 idea