spring boot 默认异常处理的实现

Spring Boot 默认的异常处理机制可以根据不同的异常类型,自动返回对应的 HTTP 状态码,同时输出异常信息,帮助我们快速定位错误。

默认情况下,无需显式配置,Spring Boot 就可以捕获控制器方法抛出的异常及一些框架内部异常。当异常被捕获后,Spring Boot 会根据异常类型来自动选择以下处理步骤:

  1. 如果是 HTTP 400 错误,返回 Bad Request 响应码。
  2. 如果是 HTTP 404 错误,返回 Not Found 响应码。
  3. 如果是 HTTP 405 错误,返回 Method Not Allowed 响应码。
  4. 如果是 HTTP 415 错误,返回 Unsupported Media Type 响应码。
  5. 如果是 HTTP 406 错误,返回 Not Acceptable 响应码。
  6. 如果异常时运行时异常(RuntimeException),则返回 HTTP 500 Internal Server Error 响应码。
  7. 如果是其他异常,则返回我们设定的默认响应码。

此外,Spring Boot 还提供了自定义异常处理机制。我们可以通过编写一个全局异常处理器,来捕获 Spring Boot 在处理异常时未能成功处理的异常,并对异常进行特定的处理操作。以下是一个示例代码:

@ControllerAdvice
public class GlobalExceptionHandler {

    @ExceptionHandler(Exception.class)
    @ResponseBody
    public BaseResponse handleException(HttpServletRequest request, Exception e) {
        BaseResponse response = new BaseResponse();
        response.setCode(HttpStatus.INTERNAL_SERVER_ERROR.value());
        response.setMessage(e.getMessage());
        return response;
    }

    @ExceptionHandler(BusinessException.class)
    @ResponseBody
    public BaseResponse handleBusinessException(HttpServletRequest request, BusinessException ex) {
        BaseResponse response = new BaseResponse();
        response.setCode(ex.getCode());
        response.setMessage(ex.getMessage());
        return response;
    }
}

上述示例代码中,我们通过使用 @ControllerAdvice 注解声明全局异常处理器,然后通过使用 @ExceptionHandler 注解来处理具体的异常类型。当 Spring Boot 在处理异常时遇到了这些异常类型时,就使用对应的处理函数来返回相应的结果。

例如,在上述示例中处理 BusinessException 时,返回的结果中包含了自定义错误码和错误信息。

另外,我们也可以通过重写 Spring Boot 提供的 ErrorController 接口,来自定义异常的返回信息格式和内容,以下是一个示例代码:

@RestController
public class CustomErrorController implements ErrorController {

    @RequestMapping("/error")
    public BaseResponse handleError(HttpServletRequest request) {
        BaseResponse response = new BaseResponse();

        Integer statusCode = (Integer) request.getAttribute("javax.servlet.error.status_code");
        if (statusCode == HttpStatus.NOT_FOUND.value()) {
            response.setCode(HttpStatus.NOT_FOUND.value());
            response.setMessage("Sorry, the resource you requested is not found.");
        } else if (statusCode == HttpStatus.INTERNAL_SERVER_ERROR.value()) {
            response.setCode(HttpStatus.INTERNAL_SERVER_ERROR.value());
            response.setMessage("Sorry, something unexpected happened.");
        } else {
            response.setCode(statusCode);
            response.setMessage("Sorry, an error occurred.");
        }

        return response;
    }

    @Override
    public String getErrorPath() {
        return "/error";
    }
}

上述示例代码中,我们通过实现 ErrorController 接口,将 /error 请求路由到一个新的函数中处理。在这个处理函数中,我们可以根据请求的 HTTP 响应码来自定义异常信息的格式和内容。

例如,当请求出现 404 错误时,返回的结果中会包含 “Sorry, the resource you requested is not found.” 的提示信息。

总的来说,Spring Boot 提供了默认的异常处理机制,并允许我们通过自定义异常处理器和重写 ErrorController 接口来进一步扩展和定制这一机制,以便更好地适应我们的应用程序需求。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:spring boot 默认异常处理的实现 - Python技术站

(0)
上一篇 2023年5月27日
下一篇 2023年5月27日

相关文章

  • 微信 java 实现js-sdk 图片上传下载完整流程

    微信 Java 实现JS-SDK 图片上传下载完整流程 前置知识 在开发过程中,我们需要了解微信JS-SDK的基本使用方法和原理,了解微信开放平台的基础知识。同时,我们还需要通过Java语言来实现JS-SDK的图片上传下载功能。 实现过程 步骤一:申请应用密钥和JS-SDK权限 在微信开放平台上为自己的应用申请应用密钥,并在公众号后台开启JS-SDK权限。获…

    Java 2023年5月20日
    00
  • Java中&&与?表达式结合时出现的坑

    在Java中,逻辑运算符(&&和||)和条件运算符(?:)是用于组合各种条件的重要工具。但当它们结合时,可能会导致一些难以预料的问题。 下面我们来详细讲解Java中&&与?表达式结合时出现的坑: 1. 问题描述 首先,让我们来看一个问题的例子。在以下代码中,我们尝试使用三元运算符,将a的值加上1(如果a大于1),然后再将b的值…

    Java 2023年5月27日
    00
  • Java实现人脸识别登录、注册等功能(最新完整版)

    首先我们来介绍一下这篇文章。《Java实现人脸识别登录、注册等功能(最新完整版)》是一篇介绍如何使用Java语言实现人脸识别登录、注册等功能的文章。文章详细介绍了如何搭建环境、实现人脸注册、识别、显示等功能。下面将对文章中的内容进行详细讲解。 一、环境搭建 在文章中,作者先介绍了如何搭建Java开发环境,包括JDK、Eclipse、OpenCV等工具的安装和…

    Java 2023年5月19日
    00
  • springboot集成mybatis官方生成器

    下面我会详细讲解“Spring Boot 集成 MyBatis 官方生成器”的完整攻略。 简介 在使用 MyBatis 进行开发时,为了提高开发效率、减少重复的代码编写,可以使用 MyBatis 官方生成器。而 Spring Boot 是一种优秀的 Java Web 开发框架,本文将会介绍如何在 Spring Boot 框架中集成 MyBatis 官方生成器…

    Java 2023年5月20日
    00
  • Redis 集成Spring的示例代码(spring-data-redis)

    下面是有关Redis集成Spring的完整攻略 1. 前置条件 在使用Spring集成Redis的过程中,需要确保以下条件:- 已经安装并配置好Redis数据库- 已经熟悉Spring的基本操作 2. 导入依赖 在 Spring 项目中,我们需要添加支持 Redis 的依赖 spring-data-redis 。 这里我们使用 Maven 管理工具进行相关依…

    Java 2023年5月20日
    00
  • 解决idea导入ssm项目启动tomcat报错404的问题

    解决idea导入SSM项目启动Tomcat报错404的问题,需要遵循以下几个步骤: 1. 检查项目配置 首先,我们需要检查项目的配置是否正确,并确保项目中的web.xml文件已正确配置或不存在。 如果您发现web.xml文件不存在,请从IDEA的“File”菜单中创建新文件。 如果您发现web.xml文件已存在,但在项目中配置错误,那么打开web.xml文件…

    Java 2023年5月19日
    00
  • 剖析Java中的事件处理与异常处理机制

    剖析Java中的事件处理与异常处理机制 事件处理机制 Java中的事件处理机制是一种将某些动作(例如按钮点击、鼠标移动等)与一些代码相结合的机制。具体来说,Java使用了一种称为“观察者设计模式”的方法来实现事件处理。在这种模式中,一个对象(称为“主题”)维护了一组观察者,这些观察者都希望跟踪主题的状态。当主题状态发生变化时,它将会通知所有的观察者,使得它们…

    Java 2023年5月27日
    00
  • 一步步带你入门Java中File类

    一步步带你入门Java中File类 什么是File类? File类是Java中用来表示文件或目录的类,它可以用来创建、删除、重命名、检查文件或目录是否存在等操作。 如何创建File对象? 我们可以通过以下两种方式来创建File对象: 方法1:使用文件路径字符串创建File对象 File file = new File("path/to/file&q…

    Java 2023年6月1日
    00
合作推广
合作推广
分享本页
返回顶部