自定义异常类不难,但下面这个方法,它的核心是异常拦截器类。
  就算是在分布式系统间进行传递也可以,只要最顶层的服务有这个异常拦截器类(下例是在 springboot 项目中)

1、自定义异常类,继承自 RuntimeException,参数只有一个异常错误码

public class BingException extends RuntimeException {
private final int code; public BingException(int code) {
this.code = code;
} public int getCode() {
return this.code;
} public String getMessage() {
return this.toString();
} public String toString() {
return "系统异常,异常编码:" + this.code;
}
}

2、异常拦截器类

package cn.jiashubing.config;

import cn.jiashubing.common.BingException;
import cn.jiashubing.result.ResultModel;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.ResponseBody; /**
* @author jiashubing
* @since 2019/6/17
*/
@ControllerAdvice
public class BingExceptionHandler { //自定义异常返回对应编码
@ExceptionHandler(BingException.class)
@ResponseBody
public ResultModel handlerBingException(BingException e) {
return new ResultModel(false, "token_outtime");
} //其他异常报对应的信息
@ExceptionHandler(Exception.class)
@ResponseBody
public ResultModel handlerSellException(Exception e) {
return new ResultModel(false, "系统出错,错误信息为:" + e.getMessage());
} }

也可以用下面复杂一点的办法

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.ResponseBody; /**
* @author jiashubing
* @since 2018/10/29
*/
@ControllerAdvice
public class ExceptionHandle { private static final Logger logger = LoggerFactory.getLogger(ExceptionHandle.class); /**
* 异常处理
* @param e 异常信息
* @return 返回类是我自定义的接口返回类,参数是返回码和返回结果,异常的返回结果为空字符串
*/
@ExceptionHandler(value = Exception.class)
@ResponseBody
public Result handle(Exception e) {
//自定义异常返回对应编码
if (e instanceof BingException) {
BingException ex = (BingException) e;
return new Result<>(ex.getCode(), "");
}
//其他异常报对应的信息
else {
logger.info("[系统异常]{}", e.getMessage(), e);
return new Result<>(-1, "");
} }
}

PS:还可以返回不同的response 状态,默认是200,@ResponseStatus(HttpStatus.INTERNAL_SERVER_ERROR) 这个是返回500状态

3、然后在代码里抛异常就可以直接抛出异常了

throw new BingException(5);

原创文章,欢迎转载,转载请注明出处!

Java自定义异常类以及异常拦截器的更多相关文章

  1. Java 过滤器、监听器、拦截器的区别

        原文:http://www.360doc.com/content/10/0601/09/495229_30616324.shtml 1.过滤器 Servlet中的过滤器Filter是实现了ja ...

  2. 我心中的核心组件(可插拔的AOP)~第四回 异常拦截器

    回到目录 之前说过有关拦截器的文章,第二回  缓存拦截器,事实上,在那讲里说的最多是AOP和缓存组件,对于拦截的概念并没有详细的说明,这一讲,不说AOP,主要说一下拦截器,拦截器Interceptio ...

  3. Spring Cloud Gateway之全局异常拦截器

    /** * @version 2019/8/14 * @description: 异常拦截器 * @modified: */ @Slf4j public class JsonExceptionHand ...

  4. Java Servlet 过滤器与 springmvc 拦截器的区别?

    前言:在工作中,遇到需要记录日志的情况,不知道该选择过滤器还是拦截器,故总结了一下. servlet 过滤器 定义 java过滤器能够对目标资源的请求和响应进行截取.过滤器的工作方式分为四种 应用场景 ...

  5. java框架之Struts2(4)-拦截器&标签库

    拦截器 概述 Interceptor (拦截器):起到拦截客户端对 Action 请求的作用. Filter:过滤器,过滤客户端向服务器发送的请求. Interceptor:拦截器,拦截的是客户端对 ...

  6. java框架篇---struts实现拦截器

    Struts2的拦截器和Servlet过滤器类似.在执行Action的execute方法之前,Struts2会首先执行在struts.xml中引用的拦截器,在执行完所有引用的拦截器的intercept ...

  7. Java过滤器(Filter)与SpringMVC拦截器(Interceptor)之间的关系与区别

    过滤器和拦截器的区别: ①拦截器是基于java的反射机制的,而过滤器是基于函数回调. ②拦截器不依赖与servlet容器,过滤器依赖与servlet容器. ③拦截器只能对action请求起作用,而过滤 ...

  8. Java内功修炼系列一拦截器

    在动态代理中,我们知道在代理类中,执行真实对象的方法前后可以增加一些其他的逻辑,这些逻辑并不是真实对象能够实现的方法,比如一个租房的用户希望租一套公寓,但是中介所代理的这个房东并没有可以出租的公寓,那 ...

  9. 【java web】过滤器、拦截器、监听器的区别

    一.对比: 1.1 过滤器和拦截器的区别: ①拦截器是基于java的反射机制的,而过滤器是基于函数回调. ②拦截器不依赖与servlet容器,过滤器依赖与servlet容器. ③拦截器只能对actio ...

随机推荐

  1. 【代码笔记】Web-CSS-CSS 语法

    一,效果图. 二,代码. <!DOCTYPE html> <html> <head> <meta charset="utf-8"> ...

  2. arcgis for js学习之Graphic类

    arcgis for js学习之Graphic类 <title>Graphic类</title> <meta charset="utf-8" /> ...

  3. Spring Boot应用总结更新

    一.SpringBoot的产生背景: SpringBoot的产生背景伴随着微服务,微服务的相关概念参考上一篇的博客,分布式架构理论: 微服务的宏观概念理解: 将一个大应用拆分成多个小应用,一个小应用是 ...

  4. Linux中DHCP服务器的简单配置

    我安装了两台linux系统,一个作为服务器,一个客户端 两个都有3个网卡, 后两个网卡聚合为zhi一个网卡:Linux 网卡聚合 两台电脑都一样. 那么如何为这个聚合网卡进行DHCP的分配呢? 1.由 ...

  5. win10 家庭版不支持gpedit.msc的解决办法

    win10 家庭版不支持gpedit.msc的解决办法 1.建立一个批处理文件内容如下: @echo off pushd "%~dp0" dir /b %systemroot%\W ...

  6. MySql 学习之路-高级1

    Mysql自学之路-高级1 目录: 1.CREATE DATABASE 创建数据库 2.CREATE TABLE 创建数据表 3.INSERT INTO SELECT 把一个表中的数据拷贝到另一个表中 ...

  7. 在java web项目中实现随项目启动的额外操作

    前言 在web项目中经常会遇到在项目启动初始,会要求做一些逻辑的实现,比如实现一个消息推送服务,实现不同类型数据同步的回调操作初始化,或则通知其他客户服务器本项目即将启动,等等.对于这种要求,目前个人 ...

  8. Flafka: Apache Flume Meets Apache Kafka for Event Processing

    The new integration between Flume and Kafka offers sub-second-latency event processing without the n ...

  9. python3 random模块

    import random '''随机获取从0-1之间的小数'''print(random.random())print(format(random.random(), ".2f" ...

  10. Linux内存管理 (25)内存sysfs节点解读

    1. General 1.1 /proc/meminfo /proc/meminfo是了解Linux系统内存使用状况主要接口,也是free等命令的数据来源. 下面是cat /proc/meminfo的 ...