才开通博客没几天,不知道写什么东西,就把最近在项目中做的东西分享一下,开通博客也可以监督一下自己,技术的路很遥远,希望能通过写博客来让自己走的更远。

一般在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自定义异常类实例讲解相关推荐

  1. java 自定义message类_Java 自定义异常类

    类1:public class LogicException extends RuntimeException { //业务逻辑异常 /** * * @param message 异常信息 */ pu ...

  2. java异常——异常分类+声明已检查异常+如何抛出异常+自定义异常类

    [0]README 0.1) 本文描述+源代码均 转自 core java volume 1, 旨在理解 java异常--异常分类+声明已检查异常+如何抛出异常+自定义异常类 的相关知识: 0.2)异 ...

  3. Python异常捕获及自定义异常类

    Python异常捕获及自定义异常类 一.什么是异常? 异常是一个与业务逻辑无关的BUG,一个潜在错误或者网络错误事件等,如:尚未实现的函数,缩进错误,Python语法错误等.该事件可能会在程序执行过程 ...

  4. 复习Java异常处理_异常分类_自定义异常_线程初步了解

    复习Java异常处理_异常分类_自定义异常_线程 主要内容 异常.线程 教学目标 第一章 异常 1.1 异常概念 异常,就是不正常的意思.在生活中:医生说,你的身体某个部位有异常,该部位和正常相比有点 ...

  5. dota是java中的_用java开发dota英雄最华丽的技能(实例讲解)

    爱java 爱dota,突发奇想想用java开发dota操作最华丽的英雄之一的卡尔的技能,因为本人系小白,代码不足的地方还请包涵,有同样爱好的同学欢迎一起研究学习. 先把我的代码呈上 import j ...

  6. 地下城英雄 java_用java开发dota英雄最华丽的技能(实例讲解)

    爱java 爱dota,突发奇想想用java开发dota操作最华丽的英雄之一的卡尔的技能,因为本人系小白,代码不足的地方还请包涵,有同样爱好的同学欢迎一起研究学习. 先把我的代码呈上 import j ...

  7. java 自定义的异常类_java Exception 自定义异常类

    创建自定义的异常类需要继承自Exception类,并提供含有一个String类型形参的构造方法,该形参就是一场的描述信息,可以通过getMessage()方法获得.例如: public class N ...

  8. java+自定义异常类+输入若干成绩 为负数时输出抛出异常_java+自定义异常类+输入若干成绩 为...

    java+自定义异常类+输入若干成绩 为 [2021-02-10 19:00:54]  简介: java中定义类的关键字是:"class".在Java中定义一个类,需要使用&quo ...

  9. java自定义异常类的父类_Java 自定义异常类

    /* *自定义异常类 * sun提供了很多的异常类给我们用于描述程序中各种的不正常情况,但是sun给我提供异常类还不足以描述我们现实生活中所有不正常情况,那么这时候我们就需要自定义异常类. * * 需 ...

  10. java 自定义异常实例分析_Java自定义异常类的实例详解

    Java自定义异常类的实例详解 为什么要自己编写异常类?假如jdk里面没有提供的异常,我们就要自己写.我们常用的类ArithmeticException,NullPointerException,Ne ...

最新文章

  1. 浏览器内核Trident/Gecko/WebKit/Presto
  2. mysql无级分销_3级分销(mysql存储过程写法)
  3. php 防止表单重复提交
  4. hibernate更新部分字段的几种方法
  5. 怎么查看ip地址下的php文件夹,pe下查看原系统ip的方法
  6. oracle静默安装实例和静默删除实例
  7. 自动变量和开辟内存的生存期和作用域探讨
  8. 一夜回到解放前,无数可依情况下如何做好风险控制
  9. 《Android深度探索》(卷1)HAL与驱动开发 第十章心得体会
  10. php调用go微服务,基于go搭建微服务实践教程 (一)
  11. Linux内存管理 (3)内核内存的布局图
  12. 喜大普奔,润乾全功能中文开源BI来了
  13. python 源码分析 基本篇
  14. Linux7 下Hadoop集群用户管理方案之五 安装Hadoop集群遇到的坑
  15. 儿童汽车拼图游戏 - 儿童游戏拼图2岁-5岁
  16. labview能打开c语言文件吗,LabVIEW还是C语言?(能够换个方式提问吗?)
  17. Flexpoint: An Adaptive Numerical Format for Efficient Training of Deep Neural Networks:弯曲点:一种有效训练深度神
  18. 使用Spring Boot构建微服务(文末福利)
  19. 关于华为NQA track 联动配置
  20. package 与 package-lock文件的区别

热门文章

  1. java pointer_Java Pointer.pointerToCString方法代码示例
  2. Qt开发 — WindowType详解
  3. 灵剑问道服务器维护到几点,问道手游2020年12月31日维护公告_问道手游12月31日更新了什么_玩游戏网...
  4. 【达梦数据库DM8】DM8基本操作及DCA考试感悟分享
  5. php确保多进程同时写入一个文件,php多进程读写同一个文件锁的问题及flock详解...
  6. win7无法发现工作组计算机,系统之家win7系统在同一个工作组看不到其他电脑的解决方法...
  7. 软文广告的写作技巧分析!
  8. Write a program that gives count of common characters presented in an array of strings..(or array of
  9. 编程之美 - 抓石头游戏(2)
  10. Metasploit扫描3389