java 自定义异常的好处_诺森小筑-韦立个人博客-java自定义异常处理类
自定义好处:
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自定义异常处理类相关推荐
- 大牛_博客Java方面链接总结
大牛_博客Java方面链接总结找找差距 源码分析 The IoC container – Spring http://thinkinginjavablog.si ...
- android常用技术网站收藏过的网址 给 Android 开发者的 RxJava 详解 Android设备标识-没有完美的解决方案-只有取舍 - 小彼得的专栏 - 博客频道 - CSDN.NET
收藏过的网址 http://www.jianshu.com/p/a7b36d682b6f?ref=myread Android插件化快速入门与实例解析 http://www.cnblogs.com/ ...
- 当了十年 IT 程序员,我转型做自动驾驶开发的这五年”_《新程序员》编辑部的博客-CSDN博客
"当了十年 IT 程序员,我转型做自动驾驶开发的这五年"_<新程序员>编辑部的博客-CSDN博客
- 零基础学习ORB-SLAM2特征点提取-从原理到源码【李哈哈】_正在刷夜的李哈哈的博客-CSDN博客
零基础学习ORB-SLAM2特征点提取-从原理到源码[李哈哈]_正在刷夜的李哈哈的博客-CSDN博客
- 用java如何画动物_用画小狗的方法来解释Java值传递
笔者的个人博客 Bridge for You 已经上线,欢迎大家前去坐坐,喝茶侃大山! (这篇文章好像挺受欢迎的,借势给自己的个人网站做做宣传 ("'▽'")) 前言 在开始看我画 ...
- 滴滴java开发面试题_滴滴出行(小桔科技)亲身面试经验分享,java开发岗
2020.11.25 概要 本次面试是最近刚面的. PS:本人java开发2年经验,这次面的是滴滴出行(小桔科技)java开发岗. 2020.11.30 滴滴又打来电话了, 预定12.3.星期四面试, ...
- java el表达式 导航规则_诺禾:在jsp里面如何不写java代码展示数据(EL表达式的使用)...
EL表达式可以简化jsp中写的java代码 在jsp里面如何不写java代码展示数据(EL表达式的使用) 在jsp里面如何不写java代码展示数据(EL表达式的使用) 在jsp里面如何不写java代码 ...
- Java实现简易联网坦克对战小游戏(内涵源码)//Java+Java游戏+拓展学习+资源分享
介绍 通过本项目能够更直观地理解应用层和运输层网络协议, 以及继承封装多态的运用. 网络部分是本文叙述的重点, 你将看到如何使用Java建立TCP和UDP连接并交换报文, 你还将看到如何自己定义一个简 ...
- java 等待几秒_问懵逼:请站在 JVM 角度谈谈 Java 的锁?
存在的问题 自旋锁 自适应自旋 Java 对象的内存布局(重要) synchronized 锁升级流程 偏向锁 轻量级锁 重量级锁 可重入 悲观锁(互斥锁.排他锁) <Java 2019 超神之 ...
最新文章
- Kattis - bela
- 万物之始正则表达式全解析三部曲(中篇)-正则表达式运算符优先级及匹配规则
- 数据中心监控管理系统设计(之一)
- 一个子数组最大值的问题
- redisTemplate获得key的过期时间方法
- EIGRP个人学习笔记
- DCOS实践分享(6):基于DCOS的大数据应用分享
- mac 终端提示_有用的终端提示
- 想从事 DBA 工作,该挑选哪一款数据库产品【转载+整理】
- PostgresSQL支持geometry类型
- 为什么用preparedStatement 而不是statement
- java面试题及答案2020 阿里(八)
- 夏普电视服务器维修,夏普液晶电视机通病维修方法
- word中脚注和尾注的处理
- matlab 双曲正割脉冲,matlab画双曲正割(急)!!!!!!!!!!!!!!!!!!!!!!...
- 替代满足、稀缺冲动、从众效应、思考快与慢就不怕退货吗?
- ‘’和“”区别和使用
- 如何安装node.js
- win10自动修复处理方法
- 大数据学习笔记之2~大数据特征
热门文章
- Unity 获取Android版本号和其他手机信息
- 阿比路架子鼓音源合集 Native Instruments Abbey Road Drummer Collection
- 毕设-基于SSM大学生兼职平台系统
- python简历数据提取_提取python简介
- SSM教务管理系统总结
- MediaCodec 从Surface编码及android锁屏录像和后台录像实现
- 【书影观后感 十】理解原则从《我的历程》看到的
- 用matlab求小波系数能量,Matlab小波能量计算函数wenergy(C,L)
- 用户因GalaxyS20相机玻璃自发开裂起诉三星
- mysql删除dort_myGallery