189 8069 5689

Springboot中怎么自定义全局异常处理

今天就跟大家聊聊有关Springboot中怎么自定义全局异常处理,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。

成都创新互联是一家集网站建设,宿城企业网站建设,宿城品牌网站建设,网站定制,宿城网站建设报价,网络营销,网络优化,宿城网站推广为一体的创新建站企业,帮助传统企业提升企业形象加强企业竞争力。可充分满足这一群体相比中小企业更为丰富、高端、多元的互联网需求。同时我们时刻保持专业、时尚、前沿,时刻以成就客户成长自我,坚持不断学习、思考、沉淀、净化自己,让我们为更多的企业打造出实用型网站。

捕获全局异常:

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

@ControllerAdvicepublic class MyControllerAdvice {  @ResponseBody  @ExceptionHandler(value = Exception.class)  public Map exceptionHandler(Exception ex){    Map map = 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抛出这些异常之后将会对这些异常进行捕获,然后按照其标注的方法的逻辑进行处理,从而改变返回的视图信息。

测试:

@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 = 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"}

看完上述内容,你们对Springboot中怎么自定义全局异常处理有进一步的了解吗?如果还想了解更多知识或者相关内容,请关注创新互联行业资讯频道,感谢大家的支持。


本文标题:Springboot中怎么自定义全局异常处理
分享地址:http://jkwzsj.com/article/pgcjep.html

其他资讯