自定义好处:

1、统一风格,方便定位问题;

2、方便控制异常流程。

第一步:创建一个自定义异常类,继承自RuntimeException,如下

package com.vlihub.common.exception;

import com.vlihub.common.enums.Codes;

/**

* 创建人: 537974(韦立)

* 创建时间: 2020-11-26 16:27

*/

public class VlihubException extends RuntimeException {

private Codes codes;

public VlihubException() {

super();

}

public VlihubException(String msg) {

super(msg);

this.codes = Codes.ERROR;

}

public VlihubException(Throwable e) {

super(e);

this.codes = Codes.ERROR;

}

public VlihubException(Codes codes) {

super(codes.getMsg());

this.codes = codes;

}

public VlihubException(Codes codes, String msg) {

super(msg);

this.codes = codes;

}

public Codes getCodes() {

return this.codes;

}

}

上面简单使用一个枚举型作为统一的返回编码。

第二步:处理异常,如下

package com.vlihub.common.exception;

import com.vlihub.common.configs.AppMailConfig;

import com.vlihub.common.enums.Codes;

import com.vlihub.common.helper.MailHelper;

import com.vlihub.common.model.vo.BaseResult;

import com.vlihub.common.model.vo.MailInfo;

import org.springframework.dao.DuplicateKeyException;

import org.springframework.web.bind.annotation.ControllerAdvice;

import org.springframework.web.bind.annotation.ExceptionHandler;

import org.springframework.web.bind.annotation.ResponseBody;

import javax.annotation.Resource;

import java.io.PrintWriter;

import java.io.StringWriter;

/**

* 创建人: 537974(韦立)

* 创建时间: 2020-11-26 16:31

*/

@ControllerAdvice

@ResponseBody

public class VlihubExceptionHandler {

@Resource

private MailHelper mailHelper;

@Resource

private AppMailConfig appMailConfig;

@ExceptionHandler(value = Exception.class)

public BaseResult exceptionHandler(Exception e) {

e.printStackTrace();

Thread th = new Thread(() -> sendErrorMail(e));

th.start();

if (e instanceof VlihubException) {

Codes code = ((VlihubException) e).getCodes();

return BaseResult.builder()

.code(code.getCode())

.title(Codes.ERROR.getMsg())

.message(e.getMessage())

.type(Codes.ERROR.toString().toLowerCase())

.build();

} else if (e instanceof NullPointerException) {

return BaseResult.error(e.getMessage(), Codes.ERROR_NULL_POINTER);

} else if (e instanceof DuplicateKeyException) {

return BaseResult.error(e.getMessage(), Codes.ERROR_SQL);

} else if (e instanceof IndexOutOfBoundsException) {

return BaseResult.error(e.getMessage(), Codes.ERROR_IDX_OUT_OF_BOUNDS);

} else if (e instanceof IllegalArgumentException) {

return BaseResult.error(e.getMessage(), Codes.ERROR_ILLEGAL_ARGUMENT);

}

return BaseResult.error(e.getMessage());

}

private void sendErrorMail(Exception e) {

MailInfo mailInfo = new MailInfo();

mailInfo.setTo(appMailConfig.getWarningTos());

mailInfo.setFrom(appMailConfig.getDefaultFrom());

mailInfo.setSubject("迈极集团-异常");

StringWriter sw = new StringWriter();

e.printStackTrace(new PrintWriter(sw));

mailInfo.setText(sw.getBuffer().toString());

mailInfo.setIsHtml(true);

mailHelper.sendMail(mailInfo);

}

}

上面对异常做了简单处理,并且异常出现后发送邮件通知。

java 自定义异常的好处_诺森小筑-韦立个人博客-java自定义异常处理类相关推荐

  1. 大牛_博客Java方面链接总结

    大牛_博客Java方面链接总结找找差距 源码分析 The IoC container – Spring                     http://thinkinginjavablog.si ...

  2. android常用技术网站收藏过的网址 给 Android 开发者的 RxJava 详解 Android设备标识-没有完美的解决方案-只有取舍 - 小彼得的专栏 - 博客频道 - CSDN.NET

    收藏过的网址 http://www.jianshu.com/p/a7b36d682b6f?ref=myread  Android插件化快速入门与实例解析 http://www.cnblogs.com/ ...

  3. 当了十年 IT 程序员,我转型做自动驾驶开发的这五年”_《新程序员》编辑部的博客-CSDN博客

    "当了十年 IT 程序员,我转型做自动驾驶开发的这五年"_<新程序员>编辑部的博客-CSDN博客

  4. 零基础学习ORB-SLAM2特征点提取-从原理到源码【李哈哈】_正在刷夜的李哈哈的博客-CSDN博客

    零基础学习ORB-SLAM2特征点提取-从原理到源码[李哈哈]_正在刷夜的李哈哈的博客-CSDN博客

  5. 用java如何画动物_用画小狗的方法来解释Java值传递

    笔者的个人博客 Bridge for You 已经上线,欢迎大家前去坐坐,喝茶侃大山! (这篇文章好像挺受欢迎的,借势给自己的个人网站做做宣传 ("'▽'")) 前言 在开始看我画 ...

  6. 滴滴java开发面试题_滴滴出行(小桔科技)亲身面试经验分享,java开发岗

    2020.11.25 概要 本次面试是最近刚面的. PS:本人java开发2年经验,这次面的是滴滴出行(小桔科技)java开发岗. 2020.11.30 滴滴又打来电话了, 预定12.3.星期四面试, ...

  7. java el表达式 导航规则_诺禾:在jsp里面如何不写java代码展示数据(EL表达式的使用)...

    EL表达式可以简化jsp中写的java代码 在jsp里面如何不写java代码展示数据(EL表达式的使用) 在jsp里面如何不写java代码展示数据(EL表达式的使用) 在jsp里面如何不写java代码 ...

  8. Java实现简易联网坦克对战小游戏(内涵源码)//Java+Java游戏+拓展学习+资源分享

    介绍 通过本项目能够更直观地理解应用层和运输层网络协议, 以及继承封装多态的运用. 网络部分是本文叙述的重点, 你将看到如何使用Java建立TCP和UDP连接并交换报文, 你还将看到如何自己定义一个简 ...

  9. java 等待几秒_问懵逼:请站在 JVM 角度谈谈 Java 的锁?

    存在的问题 自旋锁 自适应自旋 Java 对象的内存布局(重要) synchronized 锁升级流程 偏向锁 轻量级锁 重量级锁 可重入 悲观锁(互斥锁.排他锁) <Java 2019 超神之 ...

最新文章

  1. Kattis - bela
  2. 万物之始正则表达式全解析三部曲(中篇)-正则表达式运算符优先级及匹配规则
  3. 数据中心监控管理系统设计(之一)
  4. 一个子数组最大值的问题
  5. redisTemplate获得key的过期时间方法
  6. EIGRP个人学习笔记
  7. DCOS实践分享(6):基于DCOS的大数据应用分享
  8. mac 终端提示_有用的终端提示
  9. 想从事 DBA 工作,该挑选哪一款数据库产品【转载+整理】
  10. PostgresSQL支持geometry类型
  11. 为什么用preparedStatement 而不是statement
  12. java面试题及答案2020 阿里(八)
  13. 夏普电视服务器维修,夏普液晶电视机通病维修方法
  14. word中脚注和尾注的处理
  15. matlab 双曲正割脉冲,matlab画双曲正割(急)!!!!!!!!!!!!!!!!!!!!!!...
  16. 替代满足、稀缺冲动、从众效应、思考快与慢就不怕退货吗?
  17. ‘’和“”区别和使用
  18. 如何安装node.js
  19. win10自动修复处理方法
  20. 大数据学习笔记之2~大数据特征

热门文章

  1. Unity 获取Android版本号和其他手机信息
  2. 阿比路架子鼓音源合集 Native Instruments Abbey Road Drummer Collection
  3. 毕设-基于SSM大学生兼职平台系统
  4. python简历数据提取_提取python简介
  5. SSM教务管理系统总结
  6. MediaCodec 从Surface编码及android锁屏录像和后台录像实现
  7. 【书影观后感 十】理解原则从《我的历程》看到的
  8. 用matlab求小波系数能量,Matlab小波能量计算函数wenergy(C,L)
  9. 用户因GalaxyS20相机玻璃自发开裂起诉三星
  10. mysql删除dort_myGallery