Java Springboot全局异常处理

目录
  • 前言
  • 一、思路?
  • 二、步骤
    • 1.自定义接口:
    • 2.自定义错误枚举
    • 3.自定义异常类
    • 4.异常捕获
    • 5.在代码中抛异常
  • 总结

前言

对于作为菜鸟程序员的我来说,经常在controller使用try-catch 来包裹住我的service层代码,首页,他及其的不好看,其次,每个方法都有这种代码块,思考有没有办法去掉它,并且优雅的处理异常。这就是今天要说的全局异常捕获

提示:以下是本篇文章正文内容,下面案例可供参考

一、思路?

springboot提供了全局异常处理的注解,我们需要弄明白的是。扑捉什么异常,结果如果返回,如何优雅的管理返回的结果集。

二、步骤

1.自定义接口:

自定义接口主要是描述返回的code码和返回msg,自定义错误描述枚举需要实现这个接口

public interface ErrorType {
    /**
     * 返回code
     *
     * @return
     */
    String getCode();
    /**
     * 返回mesg
     *
     * @return
     */
    String getMesg();
}

2.自定义错误枚举

使用枚举,看起来代码很优雅,并且不用使用static final来定义类型。

@Getter
public enum SystemErrorType implements ErrorType {
    SYSTEM_ERROR("-1", "系统异常"),
    SYSTEM_BUSY("000001", "系统繁忙,请稍候再试");
    /**
     * 错误类型码
     */
    private String code;
    /**
     * 错误类型描述信息
     */
    private String mesg;
    SystemErrorType(String code, String mesg) {
        this.code = code;
        this.mesg = mesg;
    }
}

3.自定义异常类

@Getter
public class MyException extends RuntimeException{
    /**
     * 异常对应的错误类型
     */
  private final ErrorType errorType;
   /**
    * 默认是系统异常
    */
   public MyException () {
       this.errorType = SystemErrorType.SYSTEM_ERROR;
   }
   public MyException(SystemErrorType systemErrorType) {
	   this.errorType = systemErrorType;
    }

4.异常捕获

@RestControllerAdvice
@Slf4j
public class GlobalExceptionHandlerAdvice extends DefaultGlobalExceptionHandlerAdvice {
    @ExceptionHandler(value = {MyException .class})
    public Result MyException (MyException ex) {
        log.error(ex.getMessage());
        return Result.fail(ex.getErrorType());
    }
    @ExceptionHandler(value = {NotRoleException.class})
    public Result NotRoleException(NotRoleException nle) {
        // 打印堆栈,以供调试
        //nle.printStackTrace();
        String message = "该功能仅供"+nle.getRole()+"使用!";
        // 返回给前端
        return Result.fail("090017",message,null);
    }
}

也不是说只能通过枚举来返回,只要你的返回工具类支持参数填写,可以做类似于第二种的返回,但是这样方法对于返回的code来太好管理

5.在代码中抛异常

比如我做判空处理时,利用枚举作为参数返回

    @PostMapping("/listQuestionVO")
    public Result listQuestionBankVO(@RequestBody QuestionBankQuery query){
        if (query.getPageNum()==null || query.getPageSize()==null){
            return Result.fail(QuestionnaireErrorType.PARAMETERISNULL_ERROR);
        }
        Result result = questionBankService.listQuestionBankVO(query);
        return result;
    }

实际上,你可以在你需要处理异常的地方直接throws异常,可以直接在方法上throws抛出,等待全局异常捕获

总结

只要管理code到位,用返回类型的工具类来替换枚举更适合小白

本篇文章就到这里了,希望能够给你带来帮助,也希望您能够多多关注我们的更多内容!

(0)

相关推荐

  • springboot结合全局异常处理实现登录注册验证

    在学校做一个校企合作项目,注册登录这一块需要对注册登录进行输入合法的服务器端验证,因为是前后端分离开发,所以要求返回JSON数据. 方法有很多,这觉得用全局异常处理比较容易上手 全局异常处理 首先来创建一个sprIngboot的web项目或模块,目录结构如下 实体类User.java @Data public class User { private String userName; private String passwold; } 实体类UserResult.java 把数据封装到这里返回

  • springboot全局异常处理代码实例

    这篇文章主要介绍了springboot全局异常处理代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 前言: 开发中异常的处理必不可少,常用的就是 throw 和 try catch,这样一个项目到最后会出现很多冗余的代码,使用全局异常处理避免过多冗余代码. 全局异常处理: 1.pom 依赖(延续上一章代码): <dependencies> <!-- Spring Boot Web 依赖 --> <!-- Web 依赖

  • BGPMPLS VPN的实现技术

    BGP/MPLS VPN的实现技术 摘要 MPLS VPN技术是未来构建VPN的发展方向,越来越受到客户和运营商的青睐.BGP/MPLS VPN是第三层MPLS VPN技术.本文在对VRF.RD.RT几个重要概念进行解释之后,对BGP/MPLS VPN的数据转发过程和路由信息分发过程进行了较为详细的叙述.最后通过分析BGP/MPLS VPN的特点,分析了其市场前景. 关键词 多协议标签交换(MPLS) 虚拟局域网(VPN) 一.VPN技术概述 VPN(Virtual Private Networ

  • SpringBoot学习之全局异常处理设置(返回JSON)

    SpringBoot学习--全局异常处理设置(返回JSON) 需求 现在习惯使用ajax的方式发起请求,所以经常需要服务端返回一个json或者字符串. 控制全局的异常处理. 如果在单个方法中使用try,catch把方法包裹起来,工作量大,而且会异常的抛出而导致@Transactional注解的方法事务不会回滚. 说明 使用@ControllerAdvice注解 使用@ExceptionHandler注解 @ControllerAdvice 该注解是spring2.3以后新增的一个注解,主要是用来

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

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

  • springboot全局异常处理详解

    一.单个controller范围的异常处理 package com.xxx.secondboot.web; import org.springframework.web.bind.annotation.ExceptionHandler; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import

  • Java Springboot全局异常处理

    目录 前言 一.思路? 二.步骤 1.自定义接口: 2.自定义错误枚举 3.自定义异常类 4.异常捕获 5.在代码中抛异常 总结 前言 对于作为菜鸟程序员的我来说,经常在controller使用try-catch 来包裹住我的service层代码,首页,他及其的不好看,其次,每个方法都有这种代码块,思考有没有办法去掉它,并且优雅的处理异常.这就是今天要说的全局异常捕获 提示:以下是本篇文章正文内容,下面案例可供参考 一.思路? springboot提供了全局异常处理的注解,我们需要弄明白的是.扑

  • SpringBoot全局异常处理方式

    目录 SpringBoot全局异常处理 springboot全局异常处理--@ControllerAdvice+ExceptionHandler 一.全局捕获异常后,返回json给浏览器 二.全局捕获异常后,返回页面给浏览器 SpringBoot全局异常处理 为了让客户端能有一个更好的体验,当客户端发送请求到服务端发生错误时服务端应该明确告诉客户端错误信息. SpringBoot内置的异常处理返回的界面太杂乱,不够友好.我们需要将异常信息做封装处理响应给前端.本文介绍的为将错误信息统一封装成如下

  • SpringBoot全局异常处理方案分享

    目录 一 业务场景 二 全局系统异常类 一)全局系统异常类 二) 包装异常返回结果给前端,修改自定义异常 三 返回案例 一 业务场景 调用接口时需要对属性进行校验,比如属性长度,当属性为邮箱时校验邮箱格式等,这时候要要用到@Validated注解,在使用这个注解后发现出现了一个问题,调用接口后并没有返回我们想要的报错结果,而是返回了 "message": "Validation failed for object='IMMessageSend'. Error count: 1

  • SpringBoot全局异常处理与定制404页面的方法

    一.错误处理原理分析 使用SpringBoot创建的web项目中,当我们请求的页面不存在(http状态码为404),或者器发生异常(http状态码一般为500)时,SpringBoot就会给我们返回错误信息. 也就是说,在SpringBoot的web项目中,会自动创建一个/error的错误接口,来返回错误信息.但是针对不同的访问方式,会有以下两种不同的返回信息.这主要取决于你访问时的http头部信息的Accept这个值来指定你可以接收的类型有哪些 使用浏览器访问时的头信息及其返回结果 Accep

  • springboot 全局异常处理和统一响应对象的处理方式

    目录 springboot异常处理 SpringBoot 默认的异常处理机制 SpringBoot 全局异常处理 1. 局部异常处理 2. 全局异常处理 自定义异常 统一响应对象 定义统一的响应对象 枚举信息 响应对象 springboot异常处理 SpringBoot 默认的异常处理机制 默认情况,SpringBoot 提供两种不同响应方式 一种是浏览器客户端请求一个不存在的页面或服务端异常时,SpringBoot默认会响应一个html 另一种是使用postman等调试工具请求不存在的url或

  • springboot框架的全局异常处理方案详解

    系统框架搭建的前期过程中,为了约束代码规范,我们会对一些通用功能做一些处理,比如声明一些系统公用错误类.封装通用返回结果.统一异常处理等,这样做的优势是团队开发过程中能够形成统一的代码规范,增强代码可读性,同时又便于后期代码维护.本文主要介绍下框架中异常的处理: 1.声明全局异常处理类,并添加@ControllerAdvice和@RestController注解 代码如下: @ControllerAdvice @RestController public class GlobalExceptio

  • SpringBoot实现全局异常处理方法总结

    目录 全局异常处理 配置全局异常 全局异常处理的升级 加入自定义异常处理 处理Controller数据绑定.数据校验的异常 GlobalExceptionHandler全部代码 总结 在项目开发中出现异常时很平常不过的事情,我们处理异常也有很多种方式,可能如下: public int div(int a ,int b){ int c=0; try{ c=a/b; }catch (Exception ex){ ex.printStackTrace(); } return c; } 如果我们这样处理

  • 详解如何在SpringBoot项目中使用全局异常处理

    目录 1. 创建自定义异常 2.创建全局异常处理器 3.创建测试控制器 在完整的项目开发中,异常的出现几乎是无法避免的:如果凡是有可能出现异常的地方,我们都手动的使用try-catch将其捕获的话,虽然也能达到处理异常的效果,但是这样做会使得代码显得十分臃肿并且后期不好维护,也不利于多人系统开发. 在Spring Boot中提供了统一处理异常的方法,SpringBoot中有一个ControllerAdvice的注解,使用该注解表示开启了全局异常的捕获,我们只需在自定义一个方法使用Exceptio

随机推荐