
springboot统一异常处理
发布日期:2021-05-14 09:42:18
浏览次数:11
分类:精选文章
本文共 3576 字,大约阅读时间需要 11 分钟。
springboot统一异常处理
统一异常处理,能够将系统中出现的异常统一被工具类拦截下来,实现集中管理。
制造异常
// @TableField(value = "is_deleted")private Boolean deleted;
创建异常处理工具类
guli-framework-common中的com.guli.common.util包中,
创建异常处理工具类ExceptionUtil.java:public class ExceptionUtil { public static String getMessage(Exception e) { StringWriter sw = null; PrintWriter pw = null; try { sw = new StringWriter(); pw = new PrintWriter(sw); // 将出错的栈信息输出到printWriter中 e.printStackTrace(pw); pw.flush(); sw.flush(); } finally { if (sw != null) { try { sw.close(); } catch (IOException e1) { e1.printStackTrace(); } } if (pw != null) { pw.close(); } } return sw.toString(); }}
一、统一异常处理
1、创建统一异常处理器
guli-framework-common中的com.guli.common.handler包中,
创建统一异常处理类GlobalExceptionHandler.java:package com.guli.common.handler;/** * 统一异常处理类 */@ControllerAdvice@Slf4jpublic class GlobalExceptionHandler { @ExceptionHandler(Exception.class) @ResponseBody public R error(Exception e){ //打印异常// e.printStackTrace(); //log.error(e.getMessage()); log.error(ExceptionUtil.getMessage(e)); //将R.error()方法返回给前端 return R.error(); } /** * sql语句出问题 * @param e * @return */ @ExceptionHandler(BadSqlGrammarException.class) @ResponseBody public R error(BadSqlGrammarException e){// e.printStackTrace(); log.error(ExceptionUtil.getMessage(e)); return R.setResult(ResultCodeEnum.BAD_SQL_GRAMMAR); } /** * 前端传来json数据不符合规范 * @param e * @return */ @ExceptionHandler(HttpMessageNotReadableException.class) @ResponseBody public R error(JsonParseException e){// e.printStackTrace(); log.error(ExceptionUtil.getMessage(e)); return R.setResult(ResultCodeEnum.JSON_PARSE_ERROR); } @ExceptionHandler(GuliException.class) @ResponseBody public R error(GuliException e){// e.printStackTrace(); log.error(ExceptionUtil.getMessage(e)); return R.error().message(e.getMessage()).code(e.getCode()); }}
2、扫描异常处理器
@SpringBootApplication@ComponentScan(basePackages={"com.guli.edu","com.guli.common"})public class EduApplication {
3、恢复制造的异常
@TableField(value = "is_deleted")private Boolean deleted;
二、自定义异常
1、创建自定义异常类
common模块中创建com.guli.common.exception包,
创建GuliException.java通用异常类 继承 RuntimeException RuntimeException 对代码没有侵入性package com.guli.common.exception;@Data@ApiModel(value = "全局异常")public class GuliException extends RuntimeException { @ApiModelProperty(value = "状态码") private Integer code; /** * 接受状态码和消息 * @param code * @param message */ public GuliException(Integer code, String message) { super(message); this.code=code; } /** * 接收枚举类型 * @param resultCodeEnum */ public GuliException(ResultCodeEnum resultCodeEnum) { super(resultCodeEnum.getMessage()); this.code = resultCodeEnum.getCode(); } @Override public String toString() { return "GuliException{" + "code=" + code + ",message=" + this.getMessage() + '}'; }}
该自定义异常类能够使我能够在需要拦截异常的地方声明拦截异常。
2、业务中需要的位置抛出GuliException
@ExceptionHandler(GuliException.class)@ResponseBodypublic R error(GuliException e){ e.printStackTrace(); return R.error().message(e.getMessage()).code(e.getCode());}
e.getCode()是获取状态码。
总结
有了统一异常处理之后,我们能够从容的面对系统中出现的异常,并能很快的定位到产生异常的位置。希望这篇文章能对你有小小的帮助,感谢你的阅读。我是黑马Jack,一起学习一起进步!
发表评论
最新留言
很好
[***.229.124.182]2025年04月09日 03时49分09秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
算法训练 递归求二项式系数
2021-05-14
算法训练 完数(循环,数学知识)
2021-05-14
android studio下载安装教程
2021-05-14
生成项目依赖包文件requirements.txt
2021-05-14
什么是接口
2021-05-14
2020版nodejs12.18.3安装配置教程
2021-05-14
iview组件库中,Form组件里的Input,无法正确绑定on-enter事件
2021-05-14
记录-基于springboot+vue.js实现的超大文件分片极速上传及流式下载
2021-05-14
记录-Node.js 使用http-server搭建本地服务器
2021-05-14
JavaScript高级程序设计第四版学习记录-第九章代理与反射
2021-05-14
javascript数据结构与算法-队列结构
2021-05-14
USB typeC接口充放电电路
2021-05-14
怎么解决Windows 10文件/文件夹正在使用无法删除
2021-05-14
F28335第九篇——通用IO
2021-05-14
STM32F429第十一篇之数据类型
2021-05-14
Java编程基础_注解与命名规则&数据类型&运算符&修饰符&流程控制
2021-05-14
栈结构_数组模拟栈,链表模拟栈
2021-05-14
web项目开发记录
2021-05-14
matlab函数:sprintf详解
2021-05-14
matlab函数:fix 向0取整
2021-05-14