• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

Springboot之自定义全局异常处理的实现

springboot 搞代码 4年前 (2022-01-05) 43次浏览 已收录 0个评论

这篇文章主要介绍了Springboot之自定义全局异常处理的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

前言:

在实际的应用开发中,很多时候往往因为一些不可控的因素导致程序出现一些错误,这个时候就要及时把异常信息反馈给客户端,便于客户端能够及时地进行处理,而针对代码导致的异常,我们一般有两种处理方式,一种是throws直接抛出,一种是使用try..catch捕获,一般的话,如果逻辑的异常,需要知道异常信息,我们往往选择将异常抛出,如果只是要保证程序在出错的情况下 依然可以继续运行,则使用try..catch来捕获。

但是try..catch会导致代码量的增加,让后期我们的代码变得臃肿且难以维护。当然,springboot作为一个如此优秀的框架,肯定不会坐视不管的,通过springboot自带的注解,我们可以方便的自定义我们的全局异常处理器,并且以json格式返回给我们的客户端。

代码实战:

捕获全局异常:

首先呢,我们新建我们负责全局异常捕捉处理的类:MyControllerAdvice,代码如下:

 @ControllerAdvice public class MyControllerAdvice { @ResponseBody @ExceptionHandler(value = Exception.class) public Map exceptionHandler(Exception ex){ Map ma<i style="color:transparent">来源gaodai$ma#com搞$$代**码网</i>p = new HashMap(); map.put("code",100); map.put("msg",ex.getMessage()); //这里可以加上我们其他的异常处理代码,比如日志记录,,, return map; } } 

注解说明:
@ControllerAdvice 通过AOP的方式配合@ExceptionHandler()注解捕获在Controller层面发生的异常。如果需要扫描自定路径下的Controller,添加basePackages属性

 @ControllerAdvice(basePackages ="com.example.demo.controller")

@RestControllerAdvice : 和@ControllerAdvice作用相同,可以理解为  @ResponseBody+@ControllerAdvice 的组合使用。

@ExceptionHandler():该注解作用主要在于声明一个或多个类型的异常,当符合条件的Controller抛出这些异常之后将会对这些异常进行捕获,然后按照其标注的方法的逻辑进行处理,从而改变返回的视图信息。

测试:

 @RestController public 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 = MyException.class) public Map myExceptionHandler(MyException mex){ Map map = new HashMap(); map.put("code",mex.getErrorCode()); map.put("msg",mex.getErrorMsg()); //其他业务代码... return map; } 

测试:

 @GetMapping("/test1") public String test1(){ String name = null; if(name == null){ throw new MyException("101","用户名为空"); } return "Hello World"; } 

输出:

{“msg”:”用户名为空”,”code”:”101″}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持gaodaima搞代码网

以上就是Springboot之自定义全局异常处理的实现的详细内容,更多请关注gaodaima搞代码网其它相关文章!


搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:Springboot之自定义全局异常处理的实现

喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址