iis服务器助手广告广告
返回顶部
首页 > 资讯 > 精选 >如何在SpringBoot中实现全局异常处理方式
  • 859
分享到

如何在SpringBoot中实现全局异常处理方式

2023-06-14 18:06:28 859人浏览 独家记忆
摘要

如何在SpringBoot中实现全局异常处理方式?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。springboot是什么springboot一种全新的编程规范,

如何在SpringBoot中实现全局异常处理方式?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。

springboot是什么

springboot一种全新的编程规范,其设计目的是用来简化新Spring应用的初始搭建以及开发过程,SpringBoot也是一个服务于框架的框架,服务范围是简化配置文件。

一、全局异常处理方式一

SpringBoot中,@ControllerAdvice 即可开启全局异常处理,使用该注解表示开启了全局异常的捕获,我们只需在自定义一个方法使用@ExceptionHandler注解然后定义捕获异常的类型即可对这些捕获的异常进行统一的处理。

1.1 自定义全局异常类

@ControllerAdvicepublic class MyExceptionHandler {    @ExceptionHandler(value =Exception.class)    @ResponseBody    public String exceptionHandler(Exception e){        System.out.println("全局异常捕获>>>:"+e);        return "全局异常捕获,错误原因>>>"+e.getMessage();    }}

1.2 手动抛出异常

 @GetMapping("/getById/{userId}")public CommonResult<User> getById(@PathVariable Integer userId){    // 手动抛出异常    int a = 10/0;    return CommonResult.success(userService.getById(userId));}

1.3 测试打印

如何在SpringBoot中实现全局异常处理方式

如何在SpringBoot中实现全局异常处理方式

很显然这样的用户体验效果是极差的,虽然这种能够让我们知道异常的原因,但是在很多的情况下来说,可能还是不够人性化,不符合我们的要求。

二、全局异常处理方式二

2.1 定义基础接口类

public interface BaseErrorInfoInterface {        String getResultCode();        String getResultMsg();}

2.2 定义枚举类

public enum ExceptionEnum implements BaseErrorInfoInterface{        // 数据操作错误定义    SUCCESS("2000", "成功!"),    BODY_NOT_MATCH("4000","请求的数据格式不符!"),    SIGNATURE_NOT_MATCH("4001","请求的数字签名不匹配!"),    NOT_FOUND("4004", "未找到该资源!"),    INTERNAL_SERVER_ERROR("5000", "服务器内部错误!"),    SERVER_BUSY("5003","服务器正忙,请稍后再试!");        private final String resultCode;        private final String resultMsg;    ExceptionEnum(String resultCode, String resultMsg) {        this.resultCode = resultCode;        this.resultMsg = resultMsg;    }    @Override    public String getResultCode() {        return resultCode;    }    @Override    public String getResultMsg() {        return resultMsg;    }}

2.3 自定义异常类

public class BizException extends RuntimeException{    private static final long serialVersionUID = 1L;        protected String errorCode;        protected String errORMsg;    public BizException() {        super();    }    public BizException(BaseErrorInfoInterface errorInfoInterface) {        super(errorInfoInterface.getResultCode());        this.errorCode = errorInfoInterface.getResultCode();        this.errorMsg = errorInfoInterface.getResultMsg();    }    public BizException(BaseErrorInfoInterface errorInfoInterface, Throwable cause) {        super(errorInfoInterface.getResultCode(), cause);        this.errorCode = errorInfoInterface.getResultCode();        this.errorMsg = errorInfoInterface.getResultMsg();    }    public BizException(String errorMsg) {        super(errorMsg);        this.errorMsg = errorMsg;    }    public BizException(String errorCode, String errorMsg) {        super(errorCode);        this.errorCode = errorCode;        this.errorMsg = errorMsg;    }    public BizException(String errorCode, String errorMsg, Throwable cause) {        super(errorCode, cause);        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;    }    @Override    public Throwable fillInStackTrace() {        return this;    }}

2.4 自定义数据传输

public class ResultResponse {        private String code;        private String message;        private Object result;    public ResultResponse() {    }    public ResultResponse(BaseErrorInfoInterface errorInfo) {        this.code = errorInfo.getResultCode();        this.message = errorInfo.getResultMsg();    }    public String getCode() {        return code;    }    public void setCode(String code) {        this.code = code;    }    public String getMessage() {        return message;    }    public void setMessage(String message) {        this.message = message;    }    public Object getResult() {        return result;    }    public void setResult(Object result) {        this.result = result;    }        public static ResultResponse success() {        return success(null);    }        public static ResultResponse success(Object data) {        ResultResponse rb = new ResultResponse();        rb.setCode(ExceptionEnum.SUCCESS.getResultCode());        rb.setMessage(ExceptionEnum.SUCCESS.getResultMsg());        rb.setResult(data);        return rb;    }        public static ResultResponse error(BaseErrorInfoInterface errorInfo) {        ResultResponse rb = new ResultResponse();        rb.setCode(errorInfo.getResultCode());        rb.setMessage(errorInfo.getResultMsg());        rb.setResult(null);        return rb;    }        public static ResultResponse error(String code, String message) {        ResultResponse rb = new ResultResponse();        rb.setCode(code);        rb.setMessage(message);        rb.setResult(null);        return rb;    }        public static ResultResponse error( String message) {        ResultResponse rb = new ResultResponse();        rb.setCode("-1");        rb.setMessage(message);        rb.setResult(null);        return rb;    }    @Override    public String toString() {        return JSONObject.tojsONString(this);    }}

2.5 自定义全局异常处理

@ControllerAdvicepublic class GlobalExceptionHandler {        private static final Logger logger = LoggerFactory.getLogger(GlobalExceptionHandler.class);        @ExceptionHandler(value = BizException.class)    @ResponseBody    public ResultResponse bizExceptionHandler(httpservletRequest req, BizException e){        logger.error("发生业务异常!原因是:{}",e.getErrorMsg());        return ResultResponse.error(e.getErrorCode(),e.getErrorMsg());    }        @ExceptionHandler(value =NullPointerException.class)    @ResponseBody    public ResultResponse exceptionHandler(HttpServletRequest req, NullPointerException e){        logger.error("发生空指针异常!原因是:",e);        return ResultResponse.error(ExceptionEnum.BODY_NOT_MATCH);    }        @ExceptionHandler(value =Exception.class)    @ResponseBody    public ResultResponse exceptionHandler(HttpServletRequest req, Exception e){        logger.error("未知异常!原因是:",e);        return ResultResponse.error(ExceptionEnum.INTERNAL_SERVER_ERROR);    }}

2.6 测试代码

@PostMapping("/add")public boolean add(@RequestBody User user) {    //如果姓名为空就手动抛出一个自定义的异常!    if(user.getName()==null){        throw  new BizException("-1","用户姓名不能为空!");    }    return true;}

如何在SpringBoot中实现全局异常处理方式

 @PutMapping("/update")public boolean update(@RequestBody User user) {    //这里故意造成一个空指针的异常,并且不进行处理    String str = null;    str.equals("111");    return true;}

如何在SpringBoot中实现全局异常处理方式

 @DeleteMapping("/delete")public boolean delete(@RequestBody User user)  {    //这里故意造成一个异常,并且不进行处理    Integer.parseInt("abc123");    return true;}

如何在SpringBoot中实现全局异常处理方式

如果我们想捕获这个类型转换异常,是不是再添加一个遗产处理方法就可了。

如何在SpringBoot中实现全局异常处理方式

@ExceptionHandler(value = NumberFormatException.class)@ResponseBodypublic ResultResponse exceptionHandler(HttpServletRequest req, NumberFormatException e){    logger.error("发生类型转换异常!原因是:",e);    return ResultResponse.error(ExceptionEnum.PARAMS_NOT_CONVERT);}
PARAMS_NOT_CONVERT("4002","类型转换不对!"),

如何在SpringBoot中实现全局异常处理方式

自定义全局异常处理除了可以处理上述的数据格式之外,也可以处理页面的跳转,只需在新增的异常方法的返回处理上填写该跳转的路径并不使用ResponseBody 注解即可。

看完上述内容是否对您有帮助呢?如果还想对相关知识有进一步的了解或阅读更多相关文章,请关注编程网精选频道,感谢您对编程网的支持。

--结束END--

本文标题: 如何在SpringBoot中实现全局异常处理方式

本文链接: https://www.lsjlt.com/news/274161.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 如何在SpringBoot中实现全局异常处理方式
    如何在SpringBoot中实现全局异常处理方式?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。springboot是什么springboot一种全新的编程规范,...
    99+
    2023-06-14
  • SpringBoot全局异常处理方式
    目录SpringBoot全局异常处理springboot全局异常处理——@ControllerAdvice+ExceptionHandler一、全局捕获异常后,返回json给浏览器二...
    99+
    2022-11-12
  • Java中如何实现Springboot全局异常处理
    这篇文章主要为大家展示了“Java中如何实现Springboot全局异常处理”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“Java中如何实现Springboot全局异常处理”这篇文章吧。一、思路...
    99+
    2023-06-25
  • SpringBoot全局异常处理方式是什么
    这篇文章主要讲解了“SpringBoot全局异常处理方式是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“SpringBoot全局异常处理方式是什么”吧!SpringBoot全局异常处理为...
    99+
    2023-06-25
  • SpringBoot实现全局异常处理方法总结
    目录全局异常处理配置全局异常全局异常处理的升级加入自定义异常处理处理 Controller 数据绑定、数据校验的异常GlobalExceptionHandler全部代码总结在项目开发...
    99+
    2022-11-13
  • springboot如何实现全局异常处理及自定义异常类
    这篇文章主要介绍springboot如何实现全局异常处理及自定义异常类,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!全局异常处理及自定义异常类全局异常处理定义一个处理类,使用@ControllerAdvice注解。@...
    99+
    2023-06-29
  • springboot实现全局异常处理及自定义异常类
    目录全局异常处理及自定义异常类全局异常处理定义一个业务异常的枚举全局异常处理配置springboot Restful使用springboot 返回 ModelAndView全局异常处...
    99+
    2022-11-13
  • 如何使用SpringBoot处理全局异常
    如何使用SpringBoot处理全局异常 使用@ControllerAdvice 和 @ExceptionHandler处理全局异常 参考: @ControllerAdvice@ResponseBod...
    99+
    2023-10-27
    spring boot java 后端 异常处理
  • SpringBoot项目优雅的全局异常处理方式(全网最新)
    前言 在日常项目开发中,异常是常见的,但是如何更高效的处理好异常信息,让我们能快速定位到BUG,是很重要的,不仅能够提高我们的开发效率,还能让你代码看上去更舒服,SpringBoot...
    99+
    2022-11-12
  • 详解如何在SpringBoot项目中使用全局异常处理
    目录1. 创建自定义异常2.创建全局异常处理器3.创建测试控制器在完整的项目开发中,异常的出现几乎是无法避免的;如果凡是有可能出现异常的地方,我们都手动的使用try-catch将其捕...
    99+
    2022-11-13
    SpringBoot全局异常处理 SpringBoot 异常处理
  • springboot 全局异常处理和统一响应对象的处理方式
    目录springboot异常处理SpringBoot 默认的异常处理机制SpringBoot 全局异常处理1. 局部异常处理2. 全局异常处理自定义异常统一响应对象定义统一的响应对象...
    99+
    2022-11-13
  • SpringBoot中如何实现全局异常与数据校验
    SpringBoot中如何实现全局异常与数据校验,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。项目建立利用idea 工具,很容易的搭建一个SpringBoot项...
    99+
    2023-06-16
  • Vue实现全局异常处理的几种方案
    目录一、前端常见异常二、实现简单的全局异常处理三、Vue3 如何实现异常处理四、总结在开发组件库或者插件,经常会需要进行全局异常处理,从而实现:\ 全局统一处理异常;为开发...
    99+
    2022-11-13
  • 在springboot中springmvc出现抛出全局异常如何解决
    在springboot中springmvc出现抛出全局异常如何解决?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。springboot中抛出异常,springbo...
    99+
    2023-05-31
    springboot springmvc 全局异常
  • 如何使用Django与DRF实现全局异常处理方案
    小编给大家分享一下如何使用Django与DRF实现全局异常处理方案,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!实现的目标如果没有 DRF,我们只需要在 Djan...
    99+
    2023-06-29
  • SpringBoot切面拦截@PathVariable参数及抛出异常的全局处理方式
    目录SpringBoot切面拦截@PathVariable参数及抛出异常的全局处理例如:为了方便统一验证,基于切面来实现数据的验证全局异常处理异常原因:java.lang.refle...
    99+
    2022-11-12
  • SpringBoot统一接口返回及全局异常如何处理
    这篇文章主要介绍“SpringBoot统一接口返回及全局异常如何处理”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“SpringBoot统一接口返回及全局异常如何处理”文章能帮助大家解决问题。一、Sp...
    99+
    2023-07-02
  • SpringBoot中如何统一接口返回与全局异常处理详解
    目录背景 统一接口返回 定义API返回码枚举类 定义正常响应的API统一返回体定义异常响应的API统一返回体编写包装返回结果的自定义注解定义返回结果拦截器WebMvc配置类拦截器注册...
    99+
    2022-11-12
  • SpringBoot如何实现统一异常处理
    这篇文章将为大家详细讲解有关SpringBoot如何实现统一异常处理,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。1.介绍在日常开发中发生了异常,往往是需要通过一个统一的异常处理处理所有异常...
    99+
    2023-05-31
    springboot 统一异常 异常处理
  • .NET 6开发TodoList应用中如何实现全局异常处理
    本篇文章为大家展示了.NET 6开发TodoList应用中如何实现全局异常处理,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。需求因为在项目中,会有各种各样的领域异常或系统异常被抛出来,那么...
    99+
    2023-06-22
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作