首页 > 其他分享 >深入理解Spring Boot中的异常处理机制

深入理解Spring Boot中的异常处理机制

时间:2024-07-08 17:21:29浏览次数:14  
标签:Spring Boot springframework 深入 HttpStatus ResponseEntity import org public

深入理解Spring Boot中的异常处理机制

大家好,我是微赚淘客系统3.0的小编,也是冬天不穿秋裤,天冷也要风度的程序猿!

在任何应用程序开发中,异常处理都是至关重要的一部分。Spring Boot作为一个现代化的Java开发框架,提供了强大而灵活的异常处理机制,使开发者能够优雅地处理各种异常情况,保障应用的稳定性和可靠性。

1. 全局异常处理器

1.1. @ControllerAdvice和@ExceptionHandler

Spring Boot通过@ControllerAdvice注解和@ExceptionHandler注解来实现全局异常处理,以下是一个示例:

package cn.juwatech.exceptionhandling;

import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.ResponseStatus;

@ControllerAdvice
public class GlobalExceptionHandler {

    @ExceptionHandler(Exception.class)
    @ResponseStatus(HttpStatus.INTERNAL_SERVER_ERROR)
    @ResponseBody
    public ResponseEntity<String> handleException(Exception e) {
        return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body("Internal Server Error: " + e.getMessage());
    }

    @ExceptionHandler(ResourceNotFoundException.class)
    @ResponseStatus(HttpStatus.NOT_FOUND)
    @ResponseBody
    public ResponseEntity<String> handleResourceNotFoundException(ResourceNotFoundException e) {
        return ResponseEntity.status(HttpStatus.NOT_FOUND).body("Resource Not Found: " + e.getMessage());
    }
}

1.2. 自定义异常类

开发者可以根据具体业务需求定义自己的异常类,例如:

package cn.juwatech.exceptionhandling;

public class ResourceNotFoundException extends RuntimeException {

    public ResourceNotFoundException(String message) {
        super(message);
    }
}

2. 异常处理与RESTful API

2.1. @RestControllerAdvice和@ResponseBody

针对RESTful API,可以使用@RestControllerAdvice注解来统一处理异常,并通过@ResponseBody注解返回JSON格式的错误信息,示例如下:

package cn.juwatech.exceptionhandling;

import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.ResponseStatus;
import org.springframework.web.bind.annotation.RestControllerAdvice;

@RestControllerAdvice
public class RestExceptionHandler {

    @ExceptionHandler(Exception.class)
    @ResponseStatus(HttpStatus.INTERNAL_SERVER_ERROR)
    public ResponseEntity<ErrorResponse> handleException(Exception e) {
        ErrorResponse errorResponse = new ErrorResponse(HttpStatus.INTERNAL_SERVER_ERROR.value(), e.getMessage());
        return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body(errorResponse);
    }

    @ExceptionHandler(ResourceNotFoundException.class)
    @ResponseStatus(HttpStatus.NOT_FOUND)
    public ResponseEntity<ErrorResponse> handleResourceNotFoundException(ResourceNotFoundException e) {
        ErrorResponse errorResponse = new ErrorResponse(HttpStatus.NOT_FOUND.value(), e.getMessage());
        return ResponseEntity.status(HttpStatus.NOT_FOUND).body(errorResponse);
    }

    // 自定义ErrorResponse类用于返回错误信息
    static class ErrorResponse {
        private int status;
        private String message;

        // 省略构造方法和getter/setter
    }
}

3. 异常处理与页面

3.1. ErrorController接口

Spring Boot提供了ErrorController接口,用于处理应用程序中的错误页面,开发者可以根据需要自定义异常处理的页面显示:

package cn.juwatech.exceptionhandling;

import org.springframework.boot.web.servlet.error.ErrorController;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;

@Controller
public class CustomErrorController implements ErrorController {

    private static final String PATH = "/error";

    @RequestMapping(value = PATH)
    public String error() {
        // 返回自定义的错误页面
        return "error";
    }

    @Override
    public String getErrorPath() {
        return PATH;
    }
}

结语

本文深入探讨了Spring Boot中的异常处理机制,包括全局异常处理器、RESTful API的异常处理、错误页面的处理等方面。通过合理利用这些机制,开发者能够更好地管理和处理应用程序中的异常情况,保证应用的稳定性和可靠性。

微赚淘客系统3.0小编出品,必属精品,转载请注明出处!

标签:Spring,Boot,springframework,深入,HttpStatus,ResponseEntity,import,org,public
From: https://www.cnblogs.com/szk123456/p/18290380

相关文章

  • 解析Spring Cloud中的配置中心实现
    解析SpringCloud中的配置中心实现大家好,我是微赚淘客系统3.0的小编,也是冬天不穿秋裤,天冷也要风度的程序猿!1.SpringCloud配置中心简介SpringCloud为构建分布式系统中的微服务架构提供了丰富的解决方案,其中配置中心在微服务架构中扮演着关键角色。本文将深入探讨如何利用Spri......
  • SpringMVC-03-RestFul和Controller
    1、ControllerMVC架构中的控制层,在SpringMVC中,由Handler组成负责提供访问应用程序的行为:处理用户的请求并调用Model层将其转换为一个模型数据跳向View层在SpringMVC中,对于Controller的配置方式有很多种,通常可以通过接口定义或注解定义两种方法实现新建一个子项目,Sprin......
  • 在Spring Boot中集成单元测试框架
    在SpringBoot中集成单元测试框架大家好,我是微赚淘客系统3.0的小编,也是冬天不穿秋裤,天冷也要风度的程序猿!1.单元测试概述在软件开发中,单元测试是保证代码质量和功能正确性的重要手段。SpringBoot框架支持多种单元测试框架,如JUnit和Mockito,通过这些框架,开发者可以编写自动化的......
  • 深入理解Java中的反射与动态代理
    深入理解Java中的反射与动态代理大家好,我是微赚淘客系统3.0的小编,也是冬天不穿秋裤,天冷也要风度的程序猿!1.反射介绍在Java编程中,反射(Reflection)是指在运行时动态获取类的信息并操作类或对象的能力。Java的反射机制允许程序在运行时获取类的信息(例如类的方法、字段、注解等),并且......
  • 解决Spring Boot中的国际化与本地化问题
    解决SpringBoot中的国际化与本地化问题大家好,我是微赚淘客系统3.0的小编,也是冬天不穿秋裤,天冷也要风度的程序猿!国际化与本地化概述在开发面向全球用户的应用程序时,国际化(Internationalization,简称i18n)和本地化(Localization,简称l10n)是非常重要的考虑因素。国际化指设计和实现软......
  • SpringBoot返回文件让前端下载的几种方式
    0x01背景在后端开发中,通常会有文件下载的需求,常用的解决方案有两种:不通过后端应用,直接使用nginx直接转发文件地址下载(适用于一些公开的文件,因为这里不需要授权)通过后端进行下载,同时进行一些业务处理本篇主要以方法2进行介绍,方法2的原理步骤如下:读取文件,得到文件的字节流......
  • Spring Task定时执行
    在项目中,我们时常会遇到需要定时去自动执行一串代码的需求具体实现Spring3.0已经包含了它的坐标spring-context第一步,启动类添加@EnableScheduling开启定时执行第二步,创建定时任务类packagecom.sky.task;importcom.sky.entity.Orders;importcom.sky.mapper.OrderMap......
  • 使用 Spring Boot 结合安全框架增强支付系统的安全加固
    使用SpringBoot结合安全框架增强支付系统的安全加固随着电子支付的普及,支付过程的安全性变得至关重要。支付系统需要保护用户的敏感信息,防止数据泄露和恶意攻击。为了提高支付过程的安全性,我们可以使用SpringBoot3.x结合安全框架(如SpringSecurity)来增强支付系统的安全性......
  • SpringBoot集成Kafka快速启动示例
    源码地址:https://github.com/ghdefe/kafka-demokafka消息发送接收示例1.启动kafka实例cat<<EOF>docker-compose.ymlversion:"2"services:zookeeper:image:docker.io/bitnami/zookeeper:3.8ports:-"2181:2181"-"......
  • spring为什么使用三个缓存解决循环依赖
    使用三个缓存(singletonObjects,earlySingletonObjects,singletonFactories)来解决循环依赖问题,主要是为了确保Bean的正确创建和初始化流程,同时避免死锁和无限递归的情况。下面是使用三个缓存的好处和必要性:确保Bean的正确创建:singletonFactories缓存中保存的是Bean的工厂对象,这......