Java全局处理异常

引言

对于controller中的代码,为了保证其稳定性,我们总会对每一个controller中的代码进行try-catch,但是由于接口太多,try-catch会显得太冗杂,spring为我们提供了全局处理异常的方式

@ExceptionHandler

@RestControllerAdvice

项目构建

项目结构

相关依赖

        <dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency> <dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency> <dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency> <dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>

全局处理异常类

package com.lizi.globalexception.exception;

import com.lizi.globalexception.base.BaseResponse;
import com.lizi.globalexception.enums.HttpCode;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.RestControllerAdvice; /**
* @author lizi
* @description GlobalExceptionHandler
* @date 2022/6/7
*/
@RestControllerAdvice
public class GlobalExceptionHandler {
/**
* 兜底处理RuntimeException异常
*
* @return BaseResponse
*/
@ExceptionHandler(RuntimeException.class)
BaseResponse baseHandler() {
System.out.println("RuntimeException");
return BaseResponse.fail(HttpCode.SYSTEM_ERROR);
} /**
* 处理NullPointerException异常
*
* @return BaseResponse
*/
@ExceptionHandler(NullPointerException.class)
BaseResponse nullHandler() {
System.out.println("NullPointerException");
return BaseResponse.fail(HttpCode.NULL_ERROR);
} /**
* 处理ArithmeticException异常
*
* @return BaseResponse
*/
@ExceptionHandler(ArithmeticException.class)
BaseResponse arithmeticHandler() {
System.out.println("ArithmeticException");
return BaseResponse.fail(HttpCode.ARITHMETIC_ERROR);
}
}
package com.lizi.globalexception.enums;

/**
* @author lizi
* @description HttpCode
* @date 2022/6/7
*/
public enum HttpCode {
SUCCESS(200,"成功"),
NULL_ERROR(414,"空指针异常"),
ARITHMETIC_ERROR(415,"算数异常"),
SYSTEM_ERROR(567,"系统异常"); private int code;
private String msg; HttpCode(int code, String msg) {
this.code = code;
this.msg = msg;
} public int getCode() {
return code;
} public String getMsg() {
return msg;
}
}

演示效果

  1. 正常请求时



  2. 兜底异常被捕获时



  3. 设定的异常被捕获时



Tips

在编写测试类时 一直报错

javax.servlet.ServletException: Circular view path [queryBattle]: would dispatch back to the current handler URL [/queryBattle] again.

找了好久才发现问题



此处是因为注解使用是@ControllerAdvice

原因是因为springboot底层还是使用的springmvc不加@ResponseBody或者@RestController

返回的是ModeAndView对象,因而报错

ExceptionHandler配合RestControllerAdvice全局处理异常的更多相关文章

  1. (转)springboot全局处理异常(@ControllerAdvice + @ExceptionHandler)

    1.@ControllerAdvice 1.场景一 在构建RestFul的今天,我们一般会限定好返回数据的格式比如: { "code": 0, "data": ...

  2. 十四、springboot全局处理异常(@ControllerAdvice + @ExceptionHandler)

    1.@ControllerAdvice 1.场景一 在构建RestFul的今天,我们一般会限定好返回数据的格式比如: { "code": 0, "data": ...

  3. springboot之全局处理异常封装

    springboot之全局处理异常封装 简介 在项目中经常出现系统异常的情况,比如NullPointerException等等.如果默认未处理的情况下,springboot会响应默认的错误提示,这样对 ...

  4. spring mvc 全局处理异常

    spring框架支持很多种全局处理异常的方式 一.Spring MVC处理异常有4种方式: (1)使用Spring-MVC提供的SimpleMappingExceptionResolver: (2)实 ...

  5. Spring的@ExceptionHandler和@ControllerAdvice统一处理异常

    之前敲代码的时候,避免不了各种try..catch, 如果业务复杂一点, 就会发现全都是try…catch try{ ..........}catch(Exception1 e){ ......... ...

  6. @ExceptionHandler和@ControllerAdvice统一处理异常

    //@ExceptionHandler和@ControllerAdvice统一处理异常//统一处理异常的controller需要放在和普通controller同级的包下,或者在ComponentSca ...

  7. Ubuntu18.06 Mate桌面环境下VirtuslBox打开虚拟机“全局菜单”异常退出解决办法

    在安装完Ubuntu18.06 Mate桌面环境后在VirtuslBox里打开虚拟机会出现“全局菜单”异常退出问题. 产生上面问题的原因是你的虚拟机可能在 显示= >屏幕= >硬件加速里勾 ...

  8. Spring @ControllerAdvice @ExceptionHandler 全局处理异常

    对于与数据库相关的 Spring MVC 项目,我们通常会把 事务 配置在 Service层,当数据库操作失败时让 Service 层抛出运行时异常,Spring 事物管理器就会进行回滚. 如此一来, ...

  9. springmvc 全局的异常拦截处理 @ControllerAdvice注解 @ExceptionHandler

    第一步: Dispatcher前端控制器的源码中 默认的 private boolean throwExceptionIfNoHandlerFound = false;说明如果没有找到匹配的执行器,不 ...

随机推荐

  1. 函数,递归以及dom简单操作

    函数 函数概述 函数就是具备某个功能的一个工具.是完成某个功能的一段代码. 系统提供了很多函数,但是并不能包含所有的功能,所以有些功能需要我们自己来写----自定义函数.函数定义好以后,就可以像系统函 ...

  2. WebGPU的计算着色器实现冒泡排序

    大家好~本文使用WebGPU的计算着色器,实现了奇偶排序. 奇偶排序是冒泡排序的并行版本,在1996年由J Kornerup提出.它解除了每轮冒泡间的串行依赖以及每轮冒泡内部的串行依赖,使得冒泡操作可 ...

  3. Flask 运行报错 HTTPStatus.BAD_REQUEST This site can’t provide a secure connection

    这时候将访问的url,从https换成http 就好啦!!!!!!!!!!!!!

  4. Word修订内容批量标红

    最近改文章,期刊要求提供所有修改内容都标红的修订稿,本着能不手改就不手改的原则,我尝试检索了一下自动修改的方法,最先找到的是简书上的一篇使用VB宏命令批量修改的文章 (Word-接受全部修订为标红字体 ...

  5. React报错之Invalid hook call

    正文从这开始~ 总览 导致"Invalid hook call. Hooks can only be called inside the body of a function compone ...

  6. 详解MySQL隔离级别

    一个事务具有ACID特性,也就是(Atomicity.Consistency.Isolation.Durability,即原子性.一致性.隔离性.持久性),本文主要讲解一下其中的Isolation,也 ...

  7. [WPF] 使用 HandyControl 的 CirclePanel 画出表盘刻度

    1. 前言 最近需要一个 WPF 的表盘控件,之前 Cyril-hcj 写过一篇不错的博客 <WPF在圆上画出刻度线>,里面介绍了一些原理及详细实现的代码: double radius = ...

  8. FusionCopmpute之CNA,VRM虚拟机安装

    CNA和VRM安装步骤一样,需要修改的只有IP 按步骤创建 修改自己虚拟机想要存放的位置 需要把自己网络同样配置为仅主机(提前配好) 自己也可以修改至200G 虚拟机只是用多少取多少 CNA可以设置为 ...

  9. class 中的 构造方法、static代码块、私有/公有/静态/实例属性、继承 ( extends、constructor、super()、static、super.prop、#prop、get、set )

     part 1         /**          * << class 中的 static 代码块与 super.prop 的使用          *          * - ...

  10. Python入门系列(九)pip、try except、用户输入、字符串格式

    pip 包含模块所需的所有文件. 检查是否安装了PIP $ pip --version 安装包 $ pip install package_name 使用包 import package_name 删 ...