全局异常处理器的配置

总结:

自定义异常类  
全局异常处理器@ControllerAdvice + @ExceptionHandler
throw new 自定义异常类

步骤 1:创建自定义异常类

首先,定义一个或多个自定义异常类,以便在应用程序中抛出特定的错误。

public class CustomException extends RuntimeException {
    public CustomException(String message) {
        super(message);
    }
}

自定义的异常类要继承RuntimeException 

步骤 2:创建全局异常处理器

接下来,创建一个全局异常处理器类,并使用 @ControllerAdvice 注解。这将使该类能够处理所有控制器抛出的异常。

使用@ExceptionHandler注意捕获指定的类

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

@ControllerAdvice
public class GlobalExceptionHandler {

    @ExceptionHandler(CustomException.class)
    public ResponseEntity<String> handleCustomException(CustomException ex) {
        return new ResponseEntity<>(ex.getMessage(), HttpStatus.BAD_REQUEST);
    }

    @ExceptionHandler(Exception.class)
    public ResponseEntity<String> handleGeneralException(Exception ex) {
        return new ResponseEntity<>("An error occurred: " + ex.getMessage(), HttpStatus.INTERNAL_SERVER_ERROR);
    }
}

步骤 3:在控制器中抛出异常

在你的控制器中,你可以根据需要抛出自定义异常。这样,全局异常处理器就会捕获到这些异常

import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class MyController {

    @GetMapping("/myerror")
    public String throwError() {
        throw new CustomException("This is a custom error!");
    }
}

注意:这里路径不要用/error,因为 springboot内置了一个/error用于重定向,测试自定义异常的话可能没有效果

步骤 4:(可选)创建自动配置类

如果你希望将全局异常处理器放在一个公共模块(如 common 模块)并能在其他模块中自动使用,可以创建一个自动配置类。

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class CommonAutoConfiguration {

    @Bean
    public GlobalExceptionHandler globalExceptionHandler() {
        return new GlobalExceptionHandler();
    }
}

步骤 5:配置 spring.factories 文件

如果你创建了自动配置类,需要在 src/main/resources/META-INF/spring.factories 文件中注册它。

org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
com.example.common.CommonAutoConfiguration

 步骤 6:在其他模块中添加依赖

确保其他模块在其构建配置中添加对 common 模块的依赖,这样它们就能自动使用全局异常处理器。

<dependency>
    <groupId>com.example</groupId>
    <artifactId>common</artifactId>
    <version>1.0.0</version>
</dependency>

步骤 7:测试异常处理

启动你的应用程序并访问 /error 路径,验证是否能正确捕获并处理抛出的异常,返回相应的错误信息。

补充

我们可以定义多个异常类 ,将遇到的异常分类,比如已知什么异常或者未知异常

public class ResourceNotFoundException extends RuntimeException {
    public ResourceNotFoundException(String message) {
        super(message);
    }
}

public class InvalidInputException extends RuntimeException {
    public InvalidInputException(String message) {
        super(message);
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值