springboot异常处理机制之统一异常处理和自定义异常类
目录
- 统一异常处理相关注解
- `Controller` 层的全局异常统一处理
- 自定义异常类捕捉 `service` 层异常
- 自定义异常类
- 消息类
- 消息类处理工具类
- 统一异常拦截类
- `service` 层或其他层面抛异常
统一异常处理相关注解
@ControllerAdvice
: 声明在类上用于指定该类为控制增强器类,如果想声明返回的结果为RESTFull
风格的数据,需要在声明@ExceptionHandler
注解的方法上同时加上@ResponseBody
@RestControllerAdvice
: 声明在类上用于指定该类为控制增强器类。并声明返回的结果为RESTFull
风格的数据,无需在声明@ExceptionHandler
注解的方法上加@ResponseBody
@ExceptionHandler
: 声明在方法上用于指定需要统一拦截的异常。例如:@ExceptionHandler(value = Exception.class)
Controller
层的全局异常统一处理
- 返回给前端的是
JSON
数据
@ControllerAdvice
public class MyControllerAdvice {// 全局异常捕捉处理@ResponseBody@ExceptionHandler(value = Exception.class)public Map errorHandler(Exception ex) {Map map = new HashMap();map.put("code", 100);map.put("msg", ex.getMessage());return map;}// 拦截捕捉自定义异常 MyException.class@ResponseBody@ExceptionHandler(value = MyException.class)public Map myErrorHandler(MyException ex) {Map map = new HashMap();map.put("code", ex.getCode());map.put("msg", ex.getMsg());return map;}
}
基于 @ControllerAdvice
注解的全局异常统一处理只能针对于 Controller
层的异常,意思是只能捕获到 Controller
层的异常,在 service
层或其他层面的异常是不能捕获的。有的时候,我们需要业务逻辑时抛出自定义异常,这个时候需要自定义业务异常类
自定义异常类捕捉 service
层异常
- 返回给前端的是
JSON
数据
自定义异常类
public class BusinessException extends RuntimeException {private Integer code;public Integer getCode() {return code;}public void setCode(Integer code) {this.code = code;}public BusinessException(Integer code,String message) {super(message);this.code = code;}
}
消息类
public class ReturnMessage<T> {private Integer code;//错误码private String message;//提示信息private T data;//返回具体内容public ReturnMessage(Integer code, String message, T data) {super();this.code = code;this.message = message;this.data= data;}// 省略get and set方法
}
消息类处理工具类
public class ReturnMessageUtil {// 无异常 请求成功并有具体内容返回public static ReturnMessage<Object> sucess(Object object) {ReturnMessage<Object> message = new ReturnMessage<Object>(0,"sucess",object);return message;}// 无异常 请求成功并无具体内容返回public static ReturnMessage<Object> sucess() {ReturnMessage<Object> message = new ReturnMessage<Object>(0,"sucess",null);return message;}// 自定义错误异常信息public static ReturnMessage<Object> error(Integer code,String msg) {ReturnMessage<Object> message = new ReturnMessage<Object>(code,msg,null);return message;}
}
统一异常拦截类
@RestControllerAdvice
public class ExceptionHandle {private final static Logger logger = LoggerFactory.getLogger(ExceptionHandle.class);@ExceptionHandler(value = Exception.class)public ReturnMessage<Object> handle(Exception exception) {if(exception instanceof BusinessException) {BusinessException businessException = (BusinessException)exception;return ReturnMessageUtil.error(businessException.getCode(), businessException.getMessage());}else {logger.error("系统异常 {}",exception);return ReturnMessageUtil.error(-1, "未知异常"+ exception.getMessage());}}
}
service
层或其他层面抛异常
throw new BusinessException(100, "这个是自定义异常!")
此时,service
层或其他层面的异常就可以捕捉到了,返回给客户端 JSON
类型的异常数据
springboot异常处理机制之统一异常处理和自定义异常类相关推荐
- SpringBoot 2 快速整合 | 统一异常处理
统一异常处理相关注解介绍 @ControllerAdvice 声明在类上用于指定该类为控制增强器类,如果想声明返回的结果为 RESTFull 风格的数据,需要在声明 @ExceptionHandler ...
- java异常处理封装_Java统一异常处理(配置文件集中化定义)
0.前言 无论任何项目,都避免不了在运行期间出现的一些异常,并伴随着因业务逻辑的需要而给出相应的提示,使得系统变得更加友好,这类提示处理,我们统称为异常处理(exceptiona handling). ...
- java异常处理机制_Java的异常处理机制
Throwable 类是 Java 语言中所有错误或异常的超类.只有当对象是此类(或其子类之一)的实例时,才能通过 Java 虚拟机或者 Java 的 throw 语句抛出.类似地,只有此类或其子类之 ...
- C++异常处理机制由浅入深, 以及函数调用汇编过程底层刨析. C++11智能指针底层模拟实现
一. 异常 1.1.异常的编程模型和基本使用 咱得用一用, 解释一下上述的模型 double Div(int a, int b) {if (b == 0) throw "Zero Di ...
- 深入对比数据科学工具箱:Python和R的异常处理机制
概述 异常处理,是编程语言或计算机硬件里的一种机制,用于处理软件或信息系统中出现的异常状况(即超出程序正常执行流程的某些特殊条件).Python和R作为一门编程语言自然也是有各自的异常处理机制的,异常 ...
- java异常处理机制
1.java异常处理机制 java的异常处理机制可以让程序具有极好的容错性,让程序更加健壮.当程序运行出现意外情形时,系 统会自动生成一个 Exception对象来通知程序,从而实现将"业务 ...
- kotlin协程硬核解读(5. Java异常本质协程异常传播取消和异常处理机制)
版权声明:本文为openXu原创文章[openXu的博客],未经博主允许不得以任何形式转载 文章目录 1. 异常的本质 1.1 操作系统.程序.JVM.进程.线程 1.2 异常方法调用栈 1.3 ja ...
- java中的统一异常处理
目录 统一异常处理的原因 如果进行统一异常处理 1.编写统一异常处理类与方法 2.编写自定义异常类 3.定义异常枚举类 4.抛出指定异常 小提醒 统一异常处理的原因 在我们写代码的时候,因为各种场景需 ...
- java try catch_Java - 异常处理机制
异常定义及分类 异常指程序运行中遇到的各种不正常的状况,如:参数非法.数据库连接失败.文件无法找到.虚拟机发生错误等等.当异常发生时会干扰了程序的正常运行,因此我们必须针对发生的异常做出正确的处理,否 ...
- 【springboot异常处理】用异常信息枚举类处理异常,使用自定义异常封装异常对象,返回统一异常处理结果
1.目录: 异常信息枚举类 自定义异常类 自定义响应数据 全局异常处理类 测试 总结 异常信息枚举类 由于在业务中,有很多异常,针对不同的业务,可能给出的提示信息不同,所以为了方便项目异常信息管理,我 ...
最新文章
- 计算机视觉训练模型效果不佳怎么破?
- java mybatis向mysql数据库插入中文出现乱码
- 攻防世界-web-unfinish-从0到1的解题历程writeup
- 【转载】COM 组件设计与应用(四)——简单调用组件
- 对于自绝对父相的理解
- WS-*协议栈及相关概念
- vue指令02---自动获取焦点(全局自定义指令Vue.directive())和全局过滤器Vue.filter() 的学习...
- 使用requests库实现多线程下载
- ROS软路由的基本操作
- 如果计算机正执行屏幕保护程序 当用户,计算机一级考试参考试题(含答案)讲节一.doc...
- 表情包产业靠什么“上位”:机遇、玩法、IP
- ios 原生android系统下载地址,iOS原生系统自带分享
- 光照模型-PBS在Unity中的应用
- Prometheus+Grafana搭建Jmeter性能监控平台
- Java LocalDate类| 带示例的getMonth()方法
- Referring Image Segmentation 综述
- JavaScript使用百度地图API获取当前位置信息
- 信息学奥赛一本通:1194:移动路线
- 企业微信与个人微信实现消息互通,用企业微信连接10亿客户
- 关于xgboost中feature_importances_和xgb.plot_importance不匹配的问题。
热门文章
- 量化交易:聚宽,(1)
- 多路召回 -- 融合策略
- 151.翻转字符串里的单词
- Android studio3.5调用Numcpp库方法
- ServletRequest--从html页面获取信息
- linux拷贝文件后几百行,我 的 一 些 练 习 题
- 协方差矩阵、相关矩阵的详细说明
- 使用R包qpdf用一行代码将多个pdf合并为一个pdf
- Raki的读paper小记:SpanBERT: Improving Pre-training by Representing and Predicting Spans
- PostgreSQL 之 CREATE FUNCTION