springBoot配置全局异常处理器
一.自定义自己的异常类MyException.java
public class MyException extends RuntimeException {private int code;public MyException( int code, String message ) {super(message);this.code = code;}public int getCode() {return code;}public void setCode(int code) {this.code = code;}
}
创建自定义异常类原因:java自己的异常类只有message参数,这里我们还需要一个code参数(用来记录请求状态)。并且创建自定义异常还能和系统异常区分开来。
二.统一异常返回格式Result.java
public class Result implements Serializable {private int code;private String msg;private Object data;public int getCode() {return code;}public void setCode(int code) {this.code = code;}public String getMsg() {return msg;}public void setMsg(String msg) {this.msg = msg;}public Object getData() {return data;}public void setData(Object data) {this.data = data;}
}
三.编写全局异常处理器MyExceptionHandle.java
@ControllerAdvice
public class MyExceptionHandle {private static final Logger logger = LoggerFactory.getLogger(MyExceptionHandle.class);@ExceptionHandler(value = Exception.class)@ResponseBodypublic Result handle(Exception e) {if(e instanceof MyException) {MyException myException = (MyException)e;return ResultUtil.error(myException.getCode(),myException.getMessage());}else{logger.error("系统异常",e);return ResultUtil.error(ResultEnum.UNKNOWN_ERROR.getCode(),ResultEnum.UNKNOWN_ERROR.getMsg());}}}
四.其它类
ResultEnum.java:作用:规范错误码code极其具体表示含义。方便维护。
public enum ResultEnum {UNKNOWN_ERROR(500,"未知错误"),SUCCESS(200,"操作成功"),ERROR_1(111,"未成年1"),ERROR_2(112,"未成年2");private int code;private String msg;ResultEnum(int code, String msg) {this.code = code;this.msg = msg;}public int getCode() {return code;}public String getMsg() {return msg;}
}
ResultUtil.java:作用:方便生成Result.java而已
public class ResultUtil {public static Result error(int code,String msg) {Result result = new Result();result.setCode(code);result.setMsg(msg);result.setData(null);return result;}public static Result success(Object obj) {Result result = new Result();result.setCode(200);result.setMsg("成功");result.setData(obj);return result;}public static Result success() {Result result = new Result();result.setCode(200);result.setMsg("成功");result.setData(null);return result;}}
HelloController.java
@RestController
public class HelloController {@GetMapping("/aa")public Result aa(Girl girl) throws Exception {if(girl.getId() < 18) {throw new MyException(ResultEnum.ERROR_1.getCode(),ResultEnum.ERROR_1.getMsg());}else if(girl.getId() < 20) {throw new MyException(ResultEnum.ERROR_2.getCode(),ResultEnum.ERROR_2.getMsg());}return ResultUtil.success("aaa");}}
五.测试结果
六.注意事项
1.@RestController:等价于@Controller 、@ResponseBody一起使用
2.@ControllerAdvice:主要和@ExceptionHandler配合使用,来配置全局异常处理器,另外@ControllerAdvice内部使用了@Component注解,因此会自动被spring容器加载。如图:
3.自定义异常需要继承RuntimeException异常类,否则spring不会对事务进行回滚。
七.总结
全局异常处理器配置核心就是上面的注解。主要作用是为了将程序中可能出现的异常情况自己抛出然后用通用的格式显示。以便正确的处理错误。另外,代码如果想要优化就立马优化,如果说以后优化基本就等于永远不不会优化了。
springBoot配置全局异常处理器相关推荐
- SpringBoot 自定义全局异常处理器
SpringBoot自定义全局异常处理器 一.maven依赖 二.GlobalExceptionHandler.java 三.ResponseStandard.java 四.logback.xml 五 ...
- SpringBoot(6) SpringBoot配置全局异常
SpringBoot(6) SpringBoot配置全局异常 参考文章: (1)SpringBoot(6) SpringBoot配置全局异常 (2)https://www.cnblogs.com/pl ...
- SpringBoot配置全局异常捕获
SpringBoot中自带的异常捕获机制返回的默认页面比较丑,对用户来说不够人性化.所以这篇文章来讲解SpringBoot钟自定义全局异常捕获. 本文的源码已经上传GitHub:https://git ...
- SpringBoot中定义全局异常处理器
场景 SpringBoot中创建全局异常处理器,使发生异常时能处理. 项目搭建专栏: https://blog.csdn.net/BADAO_LIUMANG_QIZHI/column/info/356 ...
- SpringBoot项目中的全局异常处理器 Failed to invoke @ExceptionHandler method
SpringBoot项目中的全局异常处理器 Failed to invoke @ExceptionHandler method 参考文章: (1)SpringBoot项目中的全局异常处理器 Faile ...
- springboot全局异常处理器
通过aop监控程序异常,全局异常捕获 定义全局异常处理器: import java.util.HashMap; import java.util.Map; import org.springframe ...
- 全局异常处理器——优雅的处理异常
是什么 全局异常处理器即 把错误异常统一处理的方法.Java开发过程中,不可避免的会遇到各种异常情况,如果不做处理往往会导致程序崩溃!面对这种情况,传统方式就是使用try/catch去捕获并处理异常, ...
- Spring Boot配置全局异常捕获
1 SpringBoot配置全局的异常捕获 项目的说明 配置thymeleaf作为视图模板 ExceptionController.java模拟测试用 MyAjaxExceptionHandler.j ...
- SpringMVC使用HandlerExceptionResolver实现全局异常处理器
在SpringMVC中,提供了一个全局异常处理器,用于对系统中出现的异常进行统一处理.在一般的系统中,DAO层.Service层及Controller层出现异常都以"throws Excep ...
最新文章
- Linux下的qt5.7Qftp类,[翻译] Qt QFtp功能无法被Qt 5 Network系列模块替代的说明
- SpringMVC异常处理之分析和搭建环境
- Leetcode--925. 长按键入
- NSRunloop小总结
- Express-generator
- 大数据上的“大产品”
- r语言 index_基于R语言绘制BBC风格图表
- ava 8中的新功能特性
- Oracle数据库的静默安装详解
- 小米笔记本安装Win 10历程
- 线性系统实验:化学方程式配平 与 天体轨道参数估计
- 初学C语言的感受(张森)
- Binder 机制详解—Binder Java框架(转自Cloud Chou's Tech Blog)
- 应用电路笔记(1)-三极管8550和8050应用
- 1.3 guessing game
- Kubernetes kube-proxy 如何与 iptables 完美配合使用
- 20170909深度学习solar测试日志
- 谈谈互联网推广:从了解用户开始
- 19.MFA-Conformer: Multi-scale Feature Aggregation Conformer forAutomatic Speaker Verification
- OpenCV(四)——图像特征与目标检测
热门文章
- 内蒙古科技大学计算机专业校企合作好不好,校企合作真的靠谱吗 有什么坏处...
- 老毛桃制作U盘-linux
- 【小技巧】周杰伦没有离开网易云音乐
- 微软正式面向MSDN/TechNet订阅用户提供Win8下载
- Xcode 下载加速及安装指南
- 菲兹定律(Fitts's law)
- dede修改mysql,织梦教程:如何修改dedecms系统数据库表前缀?
- c++ 汉语转换成拼音
- Python数据分析习题(基于pandasnumpy模块)(上)
- oracle加入生僻字,ORACLE数据库中如何插入生僻字