Springboot统一异常处理

简介: Springboot统一异常处理

介绍

本篇介绍Springboot统一异常处理,自定义异常,前后端交互的时候我们可以进行全局异常catch。这样便于在系统出现错误的时候,我们方便排查错误。

统一结果与自定义错误枚举类

package com.elite.springboot.common;

import lombok.Data;

import lombok.experimental.Accessors;

/**

* 统一结果

*/

@Accessors(chain=true)

@Data

public class R {

   //请求返回的代码

   private Integer code;

   //请求的信息

   private String msg;

   //数据

   private Object data;

   //成功

   public static R ok(Object data){

       return new R().setCode(200).setMsg("成功").setData(data);

   }

   //成功

   public static R ok(Integer code,String msg,Object data){

       return new R().setCode(code).setMsg(msg).setData(data);

   }

   //失败

   public static R fail(){

       return new R().setCode(400).setMsg("请求失败!");

   }

   //失败

   public static R fail(Integer code,String msg){

       return new R().setCode(code).setMsg(msg).setData(null);

   }

}

错误枚举

package com.elite.springboot.common;

import lombok.AllArgsConstructor;

import lombok.Getter;

/**

* 统一错误枚举类

*/

@Getter

@AllArgsConstructor //全参数构造器

public enum ErrorEnum {

   SUCCESS(200,"请求成功"),

   FAIL(400,"请求错误"),

   SERVERERROR(500,"服务器内部错误"),

   PASSWORDERROR(10001,"密码错误"),

   PARAMETERERROE(10002,"请求参数错误"),

   NPERROR(10003,"空指针异常"),

   DIVERROR(10004,"除数异常"),

   MYEXCEPTION(10005,"自定义异常")

   // ....等等

    ;

   private Integer code;

   private String message;

}

全局异常处理

全局异常我们需要使用注解@ControllerAdvice,@ExceptionHandler指定异常的类型。

package com.elite.springboot.exception;

import com.elite.springboot.common.ErrorEnum;

import com.elite.springboot.common.R;

import org.springframework.web.bind.annotation.ControllerAdvice;

import org.springframework.web.bind.annotation.ExceptionHandler;

import org.springframework.web.bind.annotation.ResponseBody;

/**

* 我们定义一个全局异常处理类

*/

@ControllerAdvice

public class GlobalExceptionHandle {

   //通用的异常处理

   @ExceptionHandler(Exception.class)

   @ResponseBody

   public R commonHandle(Exception e){

       e.printStackTrace();

       return R.fail(ErrorEnum.FAIL.getCode(),ErrorEnum.FAIL.getMessage());

   }

   //空指针异常

   @ExceptionHandler(NullPointerException.class)

   @ResponseBody

   public R commonHandle(NullPointerException e){

       e.printStackTrace();

       return R.fail(ErrorEnum.NPERROR.getCode(),ErrorEnum.NPERROR.getMessage());

   }

   //空指针异常

   @ExceptionHandler(ArithmeticException.class)

   @ResponseBody

   public R commonHandle(ArithmeticException e){

       e.printStackTrace();

       return R.fail(ErrorEnum.DIVERROR.getCode(),ErrorEnum.DIVERROR.getMessage());

   }

   //自定义异常

   //空指针异常

   @ExceptionHandler(MyException.class)

   @ResponseBody

   public R commonHandle(MyException e){

       e.printStackTrace();

       return R.fail(ErrorEnum.MYEXCEPTION.getCode(),ErrorEnum.MYEXCEPTION.getMessage());

   }

}

自定义异常

自定义异常可以继承Exception或者运行时异常RuntimeException,重写异常的方法。

package com.elite.springboot.exception;

public class MyException extends RuntimeException{

   //可以在内部进行处理抛出自定义异常错误信息

}

测试

可以看到我们测试代码里边没有加try catch代码块,有异常自动会被全局异常拦截返回错误信息。

package com.elite.springboot.controller;

import com.elite.springboot.common.ErrorEnum;

import com.elite.springboot.common.R;

import com.elite.springboot.exception.MyException;

import org.springframework.web.bind.annotation.*;

/**

* 测试异常类controller

*/

@RequestMapping

@RestController

public class ExceptionController {

   //空指针异常

   @GetMapping("/exception1")

   public R test1(){

       String s = null;

       boolean equals = s.equals("");

       return R.ok(null);

   }

   //运算异常

   @GetMapping("/exception2")

   public R test2(){

       int i = 5/0 ;

       return R.ok(null);

   }

}

测试结果

http://localhost:8811/exception1

{"code":10003,"msg":"空指针异常","data":null}


http://localhost:8811/exception2

{"code":10004,"msg":"除数异常","data":null}

相关文章
|
JSON 前端开发 Java
SpringBoot统一功能处理
SpringBoot统一功能处理
73 0
|
缓存 前端开发 Java
SpringBoot&SpringMVC统一异常处理之RestControllerAdvice
SpringBoot&SpringMVC统一异常处理之RestControllerAdvice
125 0
|
6月前
|
JSON 前端开发 Java
统一异常处理:让Spring Boot项目异常更优雅
统一异常处理:让Spring Boot项目异常更优雅
52 1
|
Java
SpringBoot通用异常处理
通用异常返回一般用在该异常服务器无法处理的时候,进行消息的返回。所以返回代码只有 500。
95 0
|
存储 运维 Java
SpringBoot 统一异常处理(附核心工具类-ErrorInfoBuilder) 1
SpringBoot 统一异常处理(附核心工具类-ErrorInfoBuilder)
|
Java Spring
【SpringBoot】统一异常管理配置
【SpringBoot】统一异常管理配置
112 0
【SpringBoot】统一异常管理配置
|
人工智能 Java
SpringBoot实战(十):统一异常处理
SpringBoot实战(十):统一异常处理
|
JSON 前端开发 Java
SpringBoot 统一异常处理(附核心工具类-ErrorInfoBuilder) 2
SpringBoot 统一异常处理(附核心工具类-ErrorInfoBuilder)
|
Java
SpringBoot实现统一异常处理
大家在使用SpringBoot开发项目的时候肯定都需要处理异常吧,没有处理异常那么异常信息直接显示给用户这是非常不雅观的,同时还可能造成用户误会,那么今天我们就来简单的写一下如何在SpringBoot项目中实现统一的异常处理。
493 0
|
JSON Java 数据格式
对Springboot项目进行统一异常处理
对Springboot项目进行统一异常处理
对Springboot项目进行统一异常处理