目录

  • 统一异常处理相关注解
  • `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异常处理机制之统一异常处理和自定义异常类相关推荐

  1. SpringBoot 2 快速整合 | 统一异常处理

    统一异常处理相关注解介绍 @ControllerAdvice 声明在类上用于指定该类为控制增强器类,如果想声明返回的结果为 RESTFull 风格的数据,需要在声明 @ExceptionHandler ...

  2. java异常处理封装_Java统一异常处理(配置文件集中化定义)

    0.前言 无论任何项目,都避免不了在运行期间出现的一些异常,并伴随着因业务逻辑的需要而给出相应的提示,使得系统变得更加友好,这类提示处理,我们统称为异常处理(exceptiona handling). ...

  3. java异常处理机制_Java的异常处理机制

    Throwable 类是 Java 语言中所有错误或异常的超类.只有当对象是此类(或其子类之一)的实例时,才能通过 Java 虚拟机或者 Java 的 throw 语句抛出.类似地,只有此类或其子类之 ...

  4. C++异常处理机制由浅入深, 以及函数调用汇编过程底层刨析. C++11智能指针底层模拟实现

    一. 异常 1.1.异常的编程模型和基本使用 咱得用一用, 解释一下上述的模型    double Div(int a, int b) {if (b == 0) throw "Zero Di ...

  5. 深入对比数据科学工具箱:Python和R的异常处理机制

    概述 异常处理,是编程语言或计算机硬件里的一种机制,用于处理软件或信息系统中出现的异常状况(即超出程序正常执行流程的某些特殊条件).Python和R作为一门编程语言自然也是有各自的异常处理机制的,异常 ...

  6. java异常处理机制

    1.java异常处理机制 java的异常处理机制可以让程序具有极好的容错性,让程序更加健壮.当程序运行出现意外情形时,系 统会自动生成一个 Exception对象来通知程序,从而实现将"业务 ...

  7. kotlin协程硬核解读(5. Java异常本质协程异常传播取消和异常处理机制)

    版权声明:本文为openXu原创文章[openXu的博客],未经博主允许不得以任何形式转载 文章目录 1. 异常的本质 1.1 操作系统.程序.JVM.进程.线程 1.2 异常方法调用栈 1.3 ja ...

  8. java中的统一异常处理

    目录 统一异常处理的原因 如果进行统一异常处理 1.编写统一异常处理类与方法 2.编写自定义异常类 3.定义异常枚举类 4.抛出指定异常 小提醒 统一异常处理的原因 在我们写代码的时候,因为各种场景需 ...

  9. java try catch_Java - 异常处理机制

    异常定义及分类 异常指程序运行中遇到的各种不正常的状况,如:参数非法.数据库连接失败.文件无法找到.虚拟机发生错误等等.当异常发生时会干扰了程序的正常运行,因此我们必须针对发生的异常做出正确的处理,否 ...

  10. 【springboot异常处理】用异常信息枚举类处理异常,使用自定义异常封装异常对象,返回统一异常处理结果

    1.目录: 异常信息枚举类 自定义异常类 自定义响应数据 全局异常处理类 测试 总结 异常信息枚举类 由于在业务中,有很多异常,针对不同的业务,可能给出的提示信息不同,所以为了方便项目异常信息管理,我 ...

最新文章

  1. 计算机视觉训练模型效果不佳怎么破?
  2. java mybatis向mysql数据库插入中文出现乱码
  3. 攻防世界-web-unfinish-从0到1的解题历程writeup
  4. 【转载】COM 组件设计与应用(四)——简单调用组件
  5. 对于自绝对父相的理解
  6. WS-*协议栈及相关概念
  7. vue指令02---自动获取焦点(全局自定义指令Vue.directive())和全局过滤器Vue.filter() 的学习...
  8. 使用requests库实现多线程下载
  9. ROS软路由的基本操作
  10. 如果计算机正执行屏幕保护程序 当用户,计算机一级考试参考试题(含答案)讲节一.doc...
  11. 表情包产业靠什么“上位”:机遇、玩法、IP
  12. ios 原生android系统下载地址,iOS原生系统自带分享
  13. 光照模型-PBS在Unity中的应用
  14. Prometheus+Grafana搭建Jmeter性能监控平台
  15. Java LocalDate类| 带示例的getMonth()方法
  16. Referring Image Segmentation 综述
  17. JavaScript使用百度地图API获取当前位置信息
  18. 信息学奥赛一本通:1194:移动路线
  19. 企业微信与个人微信实现消息互通,用企业微信连接10亿客户
  20. 关于xgboost中feature_importances_和xgb.plot_importance不匹配的问题。

热门文章

  1. 量化交易:聚宽,(1)
  2. 多路召回 -- 融合策略
  3. 151.翻转字符串里的单词
  4. Android studio3.5调用Numcpp库方法
  5. ServletRequest--从html页面获取信息
  6. linux拷贝文件后几百行,我 的 一 些 练 习 题
  7. 协方差矩阵、相关矩阵的详细说明
  8. 使用R包qpdf用一行代码将多个pdf合并为一个pdf
  9. Raki的读paper小记:SpanBERT: Improving Pre-training by Representing and Predicting Spans
  10. PostgreSQL 之 CREATE FUNCTION