java 自定义的异常类_java自定义异常类实例讲解
才开通博客没几天,不知道写什么东西,就把最近在项目中做的东西分享一下,开通博客也可以监督一下自己,技术的路很遥远,希望能通过写博客来让自己走的更远。
一般在web项目中都需要定义一个全局异常来处理一些业务方面的异常,下面是自定义异常的一些代码。
1.自定义一个异常,然后继承RuntimeException
/**
* @author zhuwenwen
* @date 2018/8/16 20:18
*/
@Getter
public class CustomException extends RuntimeException {
/**
* 异常编码
*/
private Integer code;
/**
* 附加数据
*/
private Object data;
public CustomException(String errorMsg) {
super(errorMsg);
this.code= CustomEnum.ERROR.getCode();
}
public CustomException(String errorMsg, Integer code) {
super(errorMsg);
this.code = code;
}
public CustomException(Integer code, String errorMsg, Throwable errorCourse) {
super(errorMsg,errorCourse);
this.code = code;
}
public CustomException(String message, Integer code, Object data) {
super(message);
this.code = code;
this.data = data;
}
}
2.定义一个全局异常处理的类
/**
* 处理全局异常
*
* @author zhuwenwen
* @date 2018/8/17 9:31
*/
@RestControllerAdvice
public class CustomExceptionHandler extends ResponseEntityExceptionHandler implements CustomExceptionHanlerTrit {
private Logger logger=LoggerFactory.getLogger(CustomExceptionHandler.class);
/**
*
* @see ResponseEntityExceptionHandler#handleExceptionInternal
*/
@Override
protected ResponseEntity handleExceptionInternal(Exception ex, Object body, HttpHeaders headers, HttpStatus status,WebRequest webRequest) {
logger.warn("{}", ex.getMessage());
return handleException(CustomEnum.FAILURE_HTTP.getCode() + status.value(), ex.getMessage(), null);
}
/**
* 处理ServletException
*
* @param ex 异常
* @return 异常处理结果
*/
@ExceptionHandler(value = {ServletException.class})
protected final ResponseEntity handleServletException(ServletException ex) {
logger.error("{}", ex);
return handleException(CustomEnum.FAILURE_SERVLET.getCode(), ex.getMessage(), null);
}
/**
* 处理SQLException
*
* @param ex 异常
* @return 异常处理结果
*/
@ExceptionHandler(value = {SQLException.class})
protected final ResponseEntity handleSQLException(SQLException ex) {
logger.error("{}", ex);
return handleException(CustomEnum.FAILURE_DB.getCode(), ex.getMessage(), null);
}
/**
* 处理ConstraintViolationException
*
* @param ex 异常
* @return 异常处理结果
*/
@ExceptionHandler(value = {ConstraintViolationException.class})
protected final ResponseEntity handleConstraintViolationException(ConstraintViolationException ex) {
logger.error("{}", ex);
String message = ex.getMessage();
if (ex.getConstraintViolations() != null && !ex.getConstraintViolations().isEmpty()) {
message = ex.getConstraintViolations().stream().findFirst().isPresent()
? ex.getConstraintViolations().stream().findFirst().get().getMessage() : null;
}
return handleException(CustomEnum.FAILURE_VALIDATION.getCode(), message, null);
}
/**
* 处理MorphedException
*
* @param ex 异常
* @return 异常处理结果
*/
@ExceptionHandler(value = {CustomException.class})
protected final ResponseEntity handleMorphedException(CustomException ex) {
logger.info("{}", ex);
return handleException(ex.getCode(), ex.getMessage(),ex.getData());
}
/**
* 处理RuntimeException
*
* @param ex 异常
* @return 异常处理结果
*/
@ExceptionHandler(value = {RuntimeException.class})
protected final ResponseEntity handleRuntimeException(RuntimeException ex) {
logger.error("{}", ex);
return handleException(CustomEnum.FAILURE_UNKNOWN.getCode(), ex.getMessage(), null);
}
}
3.封装成一个组件,可以打成jar包,供多个项目使用,那么可以自定义一个注解,然后在启动类上加上这个注解,即可使用。下面是一个简单的demo
/**
* @author zhuwenwen
* @date 2018/8/17 11:02
*/
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Import(CustomExceptionHandler.class)
@Documented
public @interface EnableCustomException {
/**
* 是否开启
* @return
*/
boolean enabled() default true;
}
/**
* @author zhuwenwen
* @date 2018/8/17 14:47
*/
public class CustomImportBeanDefination implements ImportBeanDefinitionRegistrar {
@Override
public void registerBeanDefinitions(AnnotationMetadata annotationMetadata, BeanDefinitionRegistry beanDefinitionRegistry) {
//是否含有@EnableCustomException注解
if (annotationMetadata.isAnnotated(EnableCustomException.class.getName())){
//获取该注解上面的所有属性,然后封装成一个map
MultiValueMap attributes = annotationMetadata.getAllAnnotationAttributes(EnableCustomException.class.getName());
if(attributes.get(EnableCustomExceptionCode.ENABLED).equals(Boolean.TRUE)){
BeanDefinitionBuilder beanDefinitionBuilder = BeanDefinitionBuilder.rootBeanDefinition(CustomExceptionHandler.class);
beanDefinitionRegistry.registerBeanDefinition(CustomExceptionHandler.class.getName(),beanDefinitionBuilder.getBeanDefinition());
}
}
}
}
java 自定义的异常类_java自定义异常类实例讲解相关推荐
- java 自定义message类_Java 自定义异常类
类1:public class LogicException extends RuntimeException { //业务逻辑异常 /** * * @param message 异常信息 */ pu ...
- java异常——异常分类+声明已检查异常+如何抛出异常+自定义异常类
[0]README 0.1) 本文描述+源代码均 转自 core java volume 1, 旨在理解 java异常--异常分类+声明已检查异常+如何抛出异常+自定义异常类 的相关知识: 0.2)异 ...
- Python异常捕获及自定义异常类
Python异常捕获及自定义异常类 一.什么是异常? 异常是一个与业务逻辑无关的BUG,一个潜在错误或者网络错误事件等,如:尚未实现的函数,缩进错误,Python语法错误等.该事件可能会在程序执行过程 ...
- 复习Java异常处理_异常分类_自定义异常_线程初步了解
复习Java异常处理_异常分类_自定义异常_线程 主要内容 异常.线程 教学目标 第一章 异常 1.1 异常概念 异常,就是不正常的意思.在生活中:医生说,你的身体某个部位有异常,该部位和正常相比有点 ...
- dota是java中的_用java开发dota英雄最华丽的技能(实例讲解)
爱java 爱dota,突发奇想想用java开发dota操作最华丽的英雄之一的卡尔的技能,因为本人系小白,代码不足的地方还请包涵,有同样爱好的同学欢迎一起研究学习. 先把我的代码呈上 import j ...
- 地下城英雄 java_用java开发dota英雄最华丽的技能(实例讲解)
爱java 爱dota,突发奇想想用java开发dota操作最华丽的英雄之一的卡尔的技能,因为本人系小白,代码不足的地方还请包涵,有同样爱好的同学欢迎一起研究学习. 先把我的代码呈上 import j ...
- java 自定义的异常类_java Exception 自定义异常类
创建自定义的异常类需要继承自Exception类,并提供含有一个String类型形参的构造方法,该形参就是一场的描述信息,可以通过getMessage()方法获得.例如: public class N ...
- java+自定义异常类+输入若干成绩 为负数时输出抛出异常_java+自定义异常类+输入若干成绩 为...
java+自定义异常类+输入若干成绩 为 [2021-02-10 19:00:54] 简介: java中定义类的关键字是:"class".在Java中定义一个类,需要使用&quo ...
- java自定义异常类的父类_Java 自定义异常类
/* *自定义异常类 * sun提供了很多的异常类给我们用于描述程序中各种的不正常情况,但是sun给我提供异常类还不足以描述我们现实生活中所有不正常情况,那么这时候我们就需要自定义异常类. * * 需 ...
- java 自定义异常实例分析_Java自定义异常类的实例详解
Java自定义异常类的实例详解 为什么要自己编写异常类?假如jdk里面没有提供的异常,我们就要自己写.我们常用的类ArithmeticException,NullPointerException,Ne ...
最新文章
- 浏览器内核Trident/Gecko/WebKit/Presto
- mysql无级分销_3级分销(mysql存储过程写法)
- php 防止表单重复提交
- hibernate更新部分字段的几种方法
- 怎么查看ip地址下的php文件夹,pe下查看原系统ip的方法
- oracle静默安装实例和静默删除实例
- 自动变量和开辟内存的生存期和作用域探讨
- 一夜回到解放前,无数可依情况下如何做好风险控制
- 《Android深度探索》(卷1)HAL与驱动开发 第十章心得体会
- php调用go微服务,基于go搭建微服务实践教程 (一)
- Linux内存管理 (3)内核内存的布局图
- 喜大普奔,润乾全功能中文开源BI来了
- python 源码分析 基本篇
- Linux7 下Hadoop集群用户管理方案之五 安装Hadoop集群遇到的坑
- 儿童汽车拼图游戏 - 儿童游戏拼图2岁-5岁
- labview能打开c语言文件吗,LabVIEW还是C语言?(能够换个方式提问吗?)
- Flexpoint: An Adaptive Numerical Format for Efficient Training of Deep Neural Networks:弯曲点:一种有效训练深度神
- 使用Spring Boot构建微服务(文末福利)
- 关于华为NQA track 联动配置
- package 与 package-lock文件的区别
热门文章
- java pointer_Java Pointer.pointerToCString方法代码示例
- Qt开发 — WindowType详解
- 灵剑问道服务器维护到几点,问道手游2020年12月31日维护公告_问道手游12月31日更新了什么_玩游戏网...
- 【达梦数据库DM8】DM8基本操作及DCA考试感悟分享
- php确保多进程同时写入一个文件,php多进程读写同一个文件锁的问题及flock详解...
- win7无法发现工作组计算机,系统之家win7系统在同一个工作组看不到其他电脑的解决方法...
- 软文广告的写作技巧分析!
- Write a program that gives count of common characters presented in an array of strings..(or array of
- 编程之美 - 抓石头游戏(2)
- Metasploit扫描3389