springboot全局异常处理代码实例

网友投稿 249 2022-12-17


springboot全局异常处理代码实例

这篇文章主要介绍了springboot全局异常处理代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下

前言:

开发中异常的处理必不可少,常用的就是 throw 和 try catch,这样一个项目到最后会出现很多冗余的代码,使用全局异常处理避免过多冗余代码。

全局异常处理:

1、pom 依赖(延续上一章代码):

org.springframework.boot

spring-boot-starter-web

org.springframework.boot

spring-boot-starter-test

test

org.mybatis.spring.boot

mybatis-spring-boot-starter

1.3.2

mysql

mysql-connector-java

runtime

com.alibaba

druid-spring-boot-starter

1.1.0

org.projectlombok

lombok

1.16.18

com.alibaba

fastjson

1.2.31

2、公共的结果类封装:

这里简单封装,实际根据自己业务需求去封装。

@Getter

@Setter

public class ApiResult {

// 响应业务状态

private Integer status;

// 响应消息

private String msg;

// 响应中的数据

private Object data;

public static ApiResult build(Integer status, String msg, Object data) {

return new ApiResult(status, msg, data);

}

public static ApiResult ok(Object data) {

return new Aphttp://iResult(data);

}

public static ApiResult ok() {

return new ApiResult(null);

}

public ApiResult() { }

public static ApiResult build(Integer status, String msg) {

return new ApiResult(status, msg, null);

}

public ApiResult(Integer status, String msg, Object data) {

this.status = status;

this.msg = msg;

this.data = data;

}

public ApiResult(Object data) {

this.status = 200;

this.msg = "OK";

this.data = data;

}

}

3、添加全局异常处理类(在入口函数下的包中新建):

/**

* 全局异常处理 Handler

* @ControllerAdvice 配置控制器通知

* annotations 属性: 指定我们需要拦截的注解,一个或多个(多个加到大括号中,逗号分隔)

*/

// @RestControllerAdvice = @ResponseBody + @ControllerAdvice

@RestControllerAdvice(annotations = {RestController.class})

@Slf4j

public class GlobalExceptionHandler {

/**

* 默认统一异常处理方法

* @ExceptionHandler 注解用来配置需要拦截的异常类型, 也可以是自定义异常

*/

@ExceptionHandler(Exception.class)

// 此处可以指定返回的状态码 和 返回 结果说明

// @ResponseStatus(reason = "exception",value = HttpStatus.BAD_REQUEST)

public Object runtimeExceptionHandler(Exception e) {

// 打印异常信息到控制台

e.printStackTrace();

log.error("请求出现异常,异常信息为: {}", e.getMessage());

// 使用公共的结果类封装返回结果, 这里我指定状态码为 400

return ApiResult.build(400, e.getMessage());

}

}

4、异常测试类:

/**

* 异常处理测试 controller

*/

@RestController

@Slf4j

public class ExceptionController {

@RequestMapping(value = "/exception/{number}")

public ApiResult exception(@PathVariable int number) {

int res = 10 / number;

log.info(">>>>>结果number为: {}", res);

return ApiResult.ok();

}

}

5、测试:

5.1、请求接口:http://localhost:8080/exception/1 结果正常

5.2、请求接口:http://localhost:8080/exception/0 出现除以 0 错误,全局异常处理起作用,返回指定结果集。


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:Java里的static在Kotlin里如何实现
下一篇:springboot validator枚举值校验功能实现
相关文章

 发表评论

暂时没有评论,来抢沙发吧~