Java自定义异常类以及异常拦截器
自定义异常类不难,但下面这个方法,它的核心是异常拦截器类。
就算是在分布式系统间进行传递也可以,只要最顶层的服务有这个异常拦截器类(下例是在 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自定义异常类以及异常拦截器的更多相关文章
- Java 过滤器、监听器、拦截器的区别
原文:http://www.360doc.com/content/10/0601/09/495229_30616324.shtml 1.过滤器 Servlet中的过滤器Filter是实现了ja ...
- 我心中的核心组件(可插拔的AOP)~第四回 异常拦截器
回到目录 之前说过有关拦截器的文章,第二回 缓存拦截器,事实上,在那讲里说的最多是AOP和缓存组件,对于拦截的概念并没有详细的说明,这一讲,不说AOP,主要说一下拦截器,拦截器Interceptio ...
- Spring Cloud Gateway之全局异常拦截器
/** * @version 2019/8/14 * @description: 异常拦截器 * @modified: */ @Slf4j public class JsonExceptionHand ...
- Java Servlet 过滤器与 springmvc 拦截器的区别?
前言:在工作中,遇到需要记录日志的情况,不知道该选择过滤器还是拦截器,故总结了一下. servlet 过滤器 定义 java过滤器能够对目标资源的请求和响应进行截取.过滤器的工作方式分为四种 应用场景 ...
- java框架之Struts2(4)-拦截器&标签库
拦截器 概述 Interceptor (拦截器):起到拦截客户端对 Action 请求的作用. Filter:过滤器,过滤客户端向服务器发送的请求. Interceptor:拦截器,拦截的是客户端对 ...
- java框架篇---struts实现拦截器
Struts2的拦截器和Servlet过滤器类似.在执行Action的execute方法之前,Struts2会首先执行在struts.xml中引用的拦截器,在执行完所有引用的拦截器的intercept ...
- Java过滤器(Filter)与SpringMVC拦截器(Interceptor)之间的关系与区别
过滤器和拦截器的区别: ①拦截器是基于java的反射机制的,而过滤器是基于函数回调. ②拦截器不依赖与servlet容器,过滤器依赖与servlet容器. ③拦截器只能对action请求起作用,而过滤 ...
- Java内功修炼系列一拦截器
在动态代理中,我们知道在代理类中,执行真实对象的方法前后可以增加一些其他的逻辑,这些逻辑并不是真实对象能够实现的方法,比如一个租房的用户希望租一套公寓,但是中介所代理的这个房东并没有可以出租的公寓,那 ...
- 【java web】过滤器、拦截器、监听器的区别
一.对比: 1.1 过滤器和拦截器的区别: ①拦截器是基于java的反射机制的,而过滤器是基于函数回调. ②拦截器不依赖与servlet容器,过滤器依赖与servlet容器. ③拦截器只能对actio ...
随机推荐
- arcgis api 3.x for js 入门开发系列七图层控制(附源码下载)
前言 关于本篇功能实现用到的 api 涉及类看不懂的,请参照 esri 官网的 arcgis api 3.x for js:esri 官网 api,里面详细的介绍 arcgis api 3.x 各个类 ...
- arcgis api 3.x for js 入门开发系列四地图查询(附源码下载)
前言 关于本篇功能实现用到的 api 涉及类看不懂的,请参照 esri 官网的 arcgis api 3.x for js:esri 官网 api,里面详细的介绍 arcgis api 3.x 各个类 ...
- 这个月干啥去了?——H5+移动应用实战开发
又到了公司一年当中最忙的时刻了,为了赶项目,现在居然开启了996模式,这是我从事.net开发以来从来没遇到过的. 一转眼,一个月又过了,回头一看,这个月一篇文章都没有发,上个月忙着一个人做项目,项目忙 ...
- Android项目实战(一): SpannableString与SpannableStringBuilder(转)
前言: 曾经在一些APP中的一些类似“帮助”“关于”的界面看过一行文字显示不同的颜色的效果,如下效果: 本软件是一款高.大.上的社区类软件. 一般来说,这应该是由一个TextView来显示的,但是自己 ...
- adb部署及使用
一 掌握adb部署&使用方法及常用命令 1.何为adb? sdk软件开发套件software development kit apk是安卓应用安装包 adb是android sdk的一个工具, ...
- JVM远程调试功能
有时候想调试线上的程序 可以启用远程调试功能 在本地调试远程代码. 远程JVM启用调试模式 /usr/local/jdk/bin/java -server -Xms256m -Xmx256m -XX: ...
- linux中Samba服务器的配置
Samba简介 Samba是在Linux和UNIX系统上实现SMB协议的一个免费软件,由服务器及客户端程序构成.SMB(Server Messages Block,信息服务块)是一种在局域网上共享文件 ...
- 安装和使用git遇到的问题总结
一,centos7下安装(因为centos7下用yum安装git的版本太低了,所以只能下载源代码,然后用源代码安装) 下载编译工具 yum -y groupinstall "Developm ...
- 使用Java反射优化多个方法调用
有段时间没来写博客了,心里一直念叨空了来,今天有时间来记录一篇.前段时间领导提出优化部分系统模块,根据业务要求系统中有很多产品,产品下面有N个指标,一个指标就对应一个方法,所以系统代码中就是这样一个情 ...
- java图片上传及图片回显1
目的:选择图片,进行图片回显之后将图片保存到服务器上(PS:没有使用任何插件,样式很丑) 实现方式: js+servlet+jsp的方式来实现 事先准备: 文件上传处理在浏览器中是以流的形式提交到服务 ...