springboot + @ControllerAdvice + @ExceptionHandler 实现全局异常拦截

摘要:
1.目的:为了实现全局异常拦截,代码看起来更干净,而不是在控制器中编写trycatch。2.不要啰嗦,直接进入代码2.1首先,我们创建一个异常捕获和处理类(@RestControllerAdvice=@ControllerAdvice+@ResponseBody)@RestControllerAdvice@Slf4jpublicclassGlobalExceptionHandler{/***过程E

1.目的:实现全局异常拦截,不用在controller在写try catch,使用代码看起来更加整洁

2.不啰嗦直接上代码

2.1首先我们创建一个异常捕获处理类(@RestControllerAdvice = @ControllerAdvice + @ResponseBody)

@RestControllerAdvice
@Slf4j
public class GlobalExceptionHandler {

/**
* 处理 Exception 异常
*
* @parame
* @param e 异常
* @return
*/
@ExceptionHandler(value = Exception.class)
public ResponseEntity exceptionHandler(Exception e) {
log.error("服务错误:", e);
return ResponseEntity.fail(200, "服务出错");
}

/**
* 处理 BusinessException 异常
*
* @param e
* @param e 异常
* @return
*/
@ExceptionHandler(value = QDSException.class)
public ResponseEntity businessExceptionHandler(QDSException e) {
log.error("业务异常。code:" + e.getCode() + "msg:" + e.getMsg());
return ResponseEntity.fail(e.getCode(), e.getMsg());
}
}
 

2.2 扩展一下 @RestControllerAdvice还可以指定拦截哪些

springboot + @ControllerAdvice + @ExceptionHandler 实现全局异常拦截第1张

 springboot + @ControllerAdvice + @ExceptionHandler 实现全局异常拦截第2张



2.3创建一个异常返回的实体bean

@Data
public class ResponseEntity implements Serializable {
private Integer code;
private String msg;
private Object data;

public ResponseEntity() {
}


public ResponseEntity(Integer code, String msg, Object data) {
this.code = code;
this.msg = msg;
this.data = data;
}

public ResponseEntity( String msg,Object data) {
this.msg = msg;
this.data = data;
}
public ResponseEntity( Integer code,String msg) {
this.code = code;
this.msg = msg;
}

public static ResponseEntity success(String msg,String data) {
return SUCCESS(msg,data);
}
public static ResponseEntity fail(Integer code,String msg) {
return FAIL(code,msg);
}

public static ResponseEntity SUCCESS(String msg,Object data) {
return new ResponseEntity(msg,data);
}
public static ResponseEntity FAIL(Integer code,String msg) {
return new ResponseEntity(code,msg);
}
}


2.3创建一个自定义异常类

@Data
public class QDSException extends RuntimeException {
private Integer code;
private String msg;
private Object data;

public QDSException(String msg) {
this.msg= msg;
}
public QDSException(Integer code,String msg) {
this.code = code;
this.msg= msg;
}

public QDSException(Integer code, String msg, Object data) {
this.code = code;
this.msg = msg;
this.data = data;
}
}
 

2.4 接下来我们postman测试一下就可以了

@RestController
public class MyController {

@RequestMapping(value = "/test2")
public ResponseEntity test2() {
throw new QDSException(5005,"错误");
}
}

springboot + @ControllerAdvice + @ExceptionHandler 实现全局异常拦截第3张

2.5 如果我们抛出没有拦截的异常打印出堆栈信息

免责声明:文章转载自《springboot + @ControllerAdvice + @ExceptionHandler 实现全局异常拦截》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇简单对象访问协议(SOAP)初级指南[转]["第五空间"智能安全大赛 2020] 部分misc 复现下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

JAVA连接数据库

运行如下Java程序,学会JAVA连接数据库的方法。。 import java.sql.*; public class Test { public static void main(String[] srg) { String driverName = "com.microsoft.sqlserver.jdbc.SQLServerDriver"; //加载...

Oracle 11c下载 及连接到OracleDB的简单程序

Oracle官网总是不太贴心。还是网友贴心。 https://pan.baidu.com/s/1ZCFLUi4Ti_WUYOFR3gB2dA 是11g版本下载包,下载下来解压就能用了。 安装完毕后,驱动包在【oralcehome】product11.2.0dbhome_1jdbclib下。  访问Oracle的JDBC程序,建表请见 https://www...

Activity的生命周期

今天对于Activity的生命周期又有了一点深入的理解。做个总结吧。 一、正常情况下的生命周期 什么叫正常情况下的生命周期呢?也就是我们经常了解的一个活动的正常的生命流程。不用过度解释, 总结如下: (1)onCreate()方法 活动第一次创建时被调用。 (2)onStart() 活动由不可见变为可见的时候调用 (3)onResume() 当活动准备开始...

1034 Head of a Gang (30 分)(图的遍历or并查集)

dfs #include<bits/stdc++.h> using namespace std; const int N=3000; int mp[N][N]; int weight[N]; int vis[N]; map<string,int>si; map<int,string>is; map<string...

UVM基础之----uvm_object

uvm_void The uvm_void class is the base class for all UVM classes. uvm_object: The uvm_object class is the base class for all UVM data and hierarchical classes. uvm_object是一个uvm...

(C#)调用Webservice,提示远程服务器返回错误(500)内部服务器错误

因为工作需要调用WebService接口,查了下资料,发现添加服务引用可以直接调用websevice 参考地址:https://www.cnblogs.com/peterpc/p/4628441.html 如果不添加服务引用又怎么做呢?于是又去查看怎么根据http协议调用webservice并做了个无参接口测试,如下: 但一做有参的接口调用就提示500错误...