首页 > 其他分享 >Spring Boot 异常处理

Spring Boot 异常处理

时间:2024-03-27 18:56:30浏览次数:19  
标签:Java 处理 Spring Boot java 异常

  • Java 异常类
    首先让我们简单了解或重新学习下 Java 的异常机制。

Java 内部的异常类 Throwable 包括了 Exception 和 Error 两大类,所有的异常类都是 Object 对象。

Error 是不可捕捉的异常,通俗的说就是由于 Java 内部 JVM 引起的不可预见的异常, Java 虚拟机会选择终止线程。如 OutOfMemoryError ,就是 Java 虚拟机运行过程中出现内存资源错误抛出的。

Excetpion 异常是程序本身引起的,它又分为运行时异常 RuntimeException,和非运行时(编译时)IOException 等异常。如除数为零时引发的 ArrayIndexOutOfBoundException 异常就是运行时异常。非运行异常都是可查可捕捉的。Java 编译器会告诉程序他错了,错在哪里,正确的建议什么。我们可以通过 throws 配合 try-catch 来处理。

  • Java 异常处理机制
    在 Java 应用程序中,异常处理机制为:抛出异常,捕捉异常。

抛出异常:当一个方法出现错误引发异常时,方法创建异常对象并交付运行时系统,异常对象中包含异常类型和出现异常时的程序运行时信息。运行时系统负责寻找处置异常的代码并执行。

捕获异常:在方法抛出异常之后,运行时系统将转为寻找合适的异常处理器(Exception Handler)。潜在的异常处理器是异常发生时依次存留在调用栈中的方法的集合。

当异常处理器能处理的异常类型与方法抛出的异常类型相符时,即为合适的异常处理器。运行时系统从发生异常的方法开始,依次回查调用栈中的方法,直至找到含有合适异常处理器的方法并执行。
当运行时系统遍历调用栈而未找到合适 的异常处理器,则运行时系统终止。同时,意味着 Java 程序的终止。

  • Spring Boot 异常处理
    Spring Boot 的所有异常处理都基于 java 的。

在 Spring Boot 应用程序中,通常统一处理异常的方法有 使用注解处理 RestControllerAdvice
本示例主要目的处理我们日常 Spring Boot 中的异常处理

在 Web 项目中通过 ControllerAdvice、RestControllerAdvice 实现全局异常处理

ControllerAdvice 和 RestControllerAdvice 的区别 相当于 Controller 和 RestController 的区别。

代码示例

  • GlobalExceptionHandler.java
import org.springframework.http.HttpStatus;
import org.springframework.web.bind.annotation.*;

import java.util.HashMap;
import java.util.Map;

@RestControllerAdvice
public class GlobalExceptionHandler {

    @ResponseStatus(HttpStatus.INTERNAL_SERVER_ERROR)
    @ExceptionHandler({Exception.class})
    public Object exceptionHandler(Exception e){
        Map<String,Object> map=new HashMap<>();
        map.put("status",-1);
        map.put("msg",e.getLocalizedMessage());
        return map;
    }
}

  • 配置介绍
    RestControllerAdvice:全局捕获异常,异常集中处理,更好的使业务逻辑与异常处理剥离开,定义在类上

ExceptionHandler:统一处理某一类异常,声明该方法用于捕获 value 所指的类型的异常(注意:当该异常的子父类都被声明时,按照先子后父的顺序进行捕获)

ResponseStatus:将某种异常映射为 HTTP 状态码,可用在方法上,也可以用在类上(自定义运行时异常类)。

  • HogwartsTestUserController.java
    在 HogwartsTestUserController.java 新增一个 error 接口
/**
     * 模拟抛出异常
     * */
    @GetMapping("/error")
    public Object err(){
        throw new RuntimeException("抛出一个异常");
    }

GET http://127.0.0.1:8081/api/user/users/3 正常返回

{
    "id": 3,
    "name": "HogwartsTest2",
    "pwd": "HogwartsTest2"
}

GET http://127.0.0.1:8081/api/user/error 抛出异常,并给出提示信息

标签:Java,处理,Spring,Boot,java,异常
From: https://www.cnblogs.com/hogwarts/p/18099991

相关文章

  • Java内存马2-Spring内存马
    Spring内存马目录Spring内存马1、Spring&SpringMVC简介2、环境搭建3、Controller内存马4、踩坑日记5、Interceptor内存马1、Spring&SpringMVC简介Spring框架是一个开源的Java应用框架,它提供了一个综合的基础设施,用于构建Java应用程序。Spring框架的主要技术包括:依赖注入(Dep......
  • 在Spring MVC中使用Ajax进行信息验证,你可以使用以下步骤
    在SpringMVC中使用Ajax进行信息验证,你可以使用以下步骤。这里我们以一个常见的用户名唯一性验证为例。首先,你需要在SpringMVC的Controller中创建一个用于处理Ajax请求的方法。这个方法可以接收Ajax请求中的参数,比如用户名,然后进行验证。@ControllerpublicclassUserCo......
  • cas登陆页定义异常提示(中英文等
    cas登陆页定义异常提示(中英文等): 两种异常的处理方式不同,1,是通过配置文件指定用哪个异常类和方法2,是通过继承AuthenticationViaFormAction类实现(见后文)不同异常的提示,区分中英文1,定义好自定义异常2,在执行异常的地方抛出3,定义好捕捉异常的处理器   property属性文件:......
  • 就是这么简单,Selenium StaleElementReferenceException 异常分析与解决
    简介Selenium是一个流行的自动化测试工具,用于模拟用户与网页交互。然而,当我们在使用Selenium时,可能会遇到一个常见的异常,即StaleElementReferenceException。这个异常通常在我们尝试与网页上的元素交互时抛出,可能会导致我们的自动化测试脚本运行失败。本文将深入探讨StaleE......
  • Spring整合Mybatis方式一 - 常规整合 - 注册映射器
    前置工作导包(mybatis-spring、mysql-connector-java、mybatis、spring-webmvc等)实体类DAO层两个文件(接口、xml文件);Service层的接口编写Spring管理mybatis的xml-spring-dao.xml核心代码(两种方式实现)第一种:xml<!--将会话工厂对象托管给spring--><beanid="sqlSess......
  • 【无标题】idea 中 SpringBoot 点击运行没反应,按钮成灰色
    问题描述在使用SpringBoot开发项目时,可能会遇到一个问题:点击运行按钮后,控制台没有任何输出,项目界面也没有显示。这种情况可能是由多种原因导致的,本文将介绍一些常见的解决方法。解决方法首先看下Groovy插件是否选择,取消选择1.检查端口是否被占用首先,我们需要检查应用程......
  • 前端学习-UI框架学习-Bootstrap5-002-容器
    菜鸟教程链接固定宽度.container类用于创建固定宽度的响应式页面。<divclass="container"><h1>我的第一个Bootstrap页面</h1><p>这是一些文本。</p></div>100%宽度.container-fluid类用于创建一个全屏幕尺寸的容器,容器始终跨越整个屏幕宽度(width始终为100%):......
  • 前端学习-UI框架学习-Bootstrap5-001-了解和安装
    菜鸟教程链接如何安装/使用两种安装方式:使用Bootstrap5CDN。在index.html文件的head标签内,添加:<!--新Bootstrap5核心CSS文件--><linkrel="stylesheet"href="https://cdn.staticfile.net/twitter-bootstrap/5.1.1/css/bootstrap.min.css"><!--popper.m......
  • Spring Boot 工程开发常见问题解决方案,日常开发全覆盖
    本文是SpringBoot开发的干货集中营,涵盖了日常开发中遇到的诸多问题,通篇着重讲解如何快速解决问题,部分重点问题会讲解原理,以及为什么要这样做。便于大家快速处理实践中经常遇到的小问题,既方便自己也方便他人,老鸟和新手皆适合,值得收藏......
  • Thymeleaf详细教程(SpringBoot版)
    Thymeleaf详细教程(SpringBoot版):https://blog.csdn.net/YuanFudao/article/details/129085281?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522171151147816800222817242%2522%252C%2522scm%2522%253A%252220140713.130102334..%2522%257D&request_id=17115114781......