
文章插图
作者:韩数
前言:
在实际的应用开发中,很多时候往往因为一些不可控的因素导致程序出现一些错误,这个时候就要及时把异常信息反馈给客户端,便于客户端能够及时地进行处理,而针对代码导致的异常,我们一般有两种处理方式,一种是throws直接抛出,一种是使用try..catch捕获,一般的话,如果逻辑的异常,需要知道异常信息,我们往往选择将异常抛出,如果只是要保证程序在出错的情况下 依然可以继续运行,则使用try..catch来捕获 。
但是try..catch会导致代码量的增加,让后期我们的代码变得臃肿且难以维护 。当然,springboot作为一个如此优秀的框架,肯定不会坐视不管的,通过springboot自带的注解,我们可以方便的自定义我们的全局异常处理器,并且以json格式返回给我们的客户端 。
代码实战:捕获全局异常:
首先呢,我们新建我们负责全局异常捕捉处理的类:MyControllerAdvice,代码如下:
@ControllerAdvicepublic class MyControllerAdvice {?? @ResponseBody @ExceptionHandler(value = https://www.isolves.com/it/wlyx/fwq/2019-08-28/Exception.class) public Map
@ControllerAdvice 通过AOP的方式配合@ExceptionHandler()注解捕获在Controller层面发生的异常 。如果需要扫描自定路径下的Controller,添加basePackages属性
@ControllerAdvice(basePackages ="com.example.demo.controller")@RestControllerAdvice : 和@ControllerAdvice作用相同,可以理解为 @ResponseBody+@ControllerAdvice 的组合使用 。
@ExceptionHandler():该注解作用主要在于声明一个或多个类型的异常,当符合条件的Controller抛出这些异常之后将会对这些异常进行捕获,然后按照其标注的方法的逻辑进行处理,从而改变返回的视图信息 。
测试:
@RestControllerpublic class UserController {?? @GetMApping("/test") public String test(){ int num = 1/0; return "Hello World"; }??}结果:
{"msg":"/ by zero","code":100}捕获自定义异常:自定义我们的异常信息类MyException 并继承RuntimeException:
public class MyException extends RuntimeException {? private String errorCode; private String errorMsg;? public MyException(String errorCode, String errorMsg) { this.errorCode = errorCode; this.errorMsg = errorMsg; }?? public String getErrorCode() { return errorCode; }? public void setErrorCode(String errorCode) { this.errorCode = errorCode; }? public String getErrorMsg() { return errorMsg; }? public void setErrorMsg(String errorMsg) { this.errorMsg = errorMsg; } }?修改我们的MyControllerAdvice,将MyException添加进去:
@ResponseBody @ExceptionHandler(value = https://www.isolves.com/it/wlyx/fwq/2019-08-28/MyException.class) public Map
@GetMapping("/test1") public String test1(){ String name = null; if(name == null){ throw new MyException("101","用户名为空"); } return "Hello World"; }输出:
{"msg":"用户名为空","code":"101"}完成~
我是小架,欢迎关注我
【SPRINGBOOT之自定义全局异常处理】
推荐阅读
- 百城赋之《乐山赋》_峨眉山_嘉州_网易订阅
- 不仅免费游峨眉山,这些无价之宝你还可以通通带走!
- 养生之大黄茶
- 茶席布置三大要素之二 音乐的选播
- 茶席重要元素之 茶器
- 茶席 尺之地
- 普洱茶味道之辨,普洱茶韵佳
- 老外的茶俗之英式下午茶
- 茶俗中的君子之交,以壶还壶
- 同样是四口之家,同样的面积,为什么集体土地拆迁补偿不一样?!
