Springboot 全局异常监控配置

简介

在实际项目开发中,总会出现各种各样的异常信息,如:ArithmeticExceptionNullpointException还有自定义异常等。
当出现异常时,往往直接发往了客户端,导致数据整体格式显示异常和不美观的现象,如果优雅的显示或返回异常信息,这种操作很关键。

测试案例

本次测试采取Springboot版本为:2.1.14.RELEASE

依赖引入

<parent>
		<groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-starter-parent</artifactId>
		<version>2.1.14.RELEASE</version>
	</parent>

	<properties>
		<java.version>1.8</java.version>
		<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
		<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
	</properties>
	<dependencies>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter</artifactId>
		</dependency>

		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-web</artifactId>
		</dependency>
		
		<!-- 阿里巴巴json -->
		<dependency>
			<groupId>com.alibaba</groupId>
			<artifactId>fastjson</artifactId>
			<version>1.2.44</version>
		</dependency>
		<!-- lombok -->
		<dependency>
			<groupId>org.projectlombok</groupId>
			<artifactId>lombok</artifactId>
			<version>1.18.6</version>
			<scope>provided</scope>
		</dependency>

		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-test</artifactId>
			<scope>test</scope>
		</dependency>
	</dependencies>

定义一个请求类

@RestController
public class ExceptionController {
	
	@RequestMapping("/testEX")
	public String testEX() {
		int a = 10/0;
		return "success";
	}
}

请求测试

在这里插入图片描述
直接白板显示报错信息,不够美观。增加全局异常配置拦截过滤,当有异常时,返回异常信息。

配置全局异常

@RestControllerAdvice 
//@ControllerAdvice //根据需要监测的controller上的注解区分使用
public class ExceptionAdvice{
	@ExceptionHandler(value = ArithmeticException.class)
	public String arithmeticException(Exception e) {
		return "出现异常,异常信息为:"+e;
	}
}

在这里插入图片描述
这样的提示信息,相比之前的白板,就幽雅美观了很多。其次还能自定义异常操作。

自定义异常

public class MyException extends RuntimeException {
	private static final long serialVersionUID = -261801339539851004L;
	
	private String errMsg;

	public String getErrMsg() {
		return errMsg;
	}

	public void setErrMsg(String errMsg) {
		this.errMsg = errMsg;
	}

	public MyException(String errMsg) {
		super();
		this.errMsg = errMsg;
	}
	
	
}

至于继承RuntimeException还是继承Exception都没什么关系。
在这里插入图片描述
然后定义一个请求接口,针对某些请求抛出异常信息。

@RequestMapping("/testEX2")
	public String testEX2(String name) {
		if("11".equals(name)) {
			throw new MyException("出现异常了。。。。");
		}
		return "success";
	}

当然,不加全局异常捕获,一样出现白板提示界面。

增加一个异常全局监控,捕获全局异常信息(或指定异常),返回重要的信息。

@ExceptionHandler(value = MyException.class)
	public String myException(MyException e) {
		return "出现MyException,异常信息为:"+e.getErrMsg();
	}

请求异常测试:
在这里插入图片描述

结语

正常来说,开发采取前后分离方式,会采取json方式实现数据的交互传输,在全局异常信息中,返回json信息也可以,此处为了方便理解,未添加json返回类型。

猜你喜欢

转载自blog.csdn.net/qq_38322527/article/details/107611948