基于SpringCloud封装统一的异常处理

在 Spring Cloud 中,可以通过自定义异常处理器来封装统一的异常处理逻辑。异常处理器能够捕获并处理应用程序中的异常,然后返回适当的错误响应。以下是一个基于 Spring Cloud 的统一异常处理的示例:

创建自定义异常类:

首先,创建自定义的异常类,继承自 Spring 的 RuntimeException 或其子类。创建一个名为 CustomException 的异常类:

public class CustomException extends RuntimeException {
    // 添加构造方法
    public CustomException(String message) {
        super(message);
    }
}

创建异常处理器:

接下来,创建一个异常处理器类,用于捕获和处理异常,并返回适当的错误响应。实现 Spring 的 ResponseEntityExceptionHandler 类来自定义全局异常处理:

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.servlet.mvc.method.annotation.ResponseEntityExceptionHandler;

@ControllerAdvice
public class GlobalExceptionHandler extends ResponseEntityExceptionHandler {

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

    // 添加其他异常处理方法
}

在上述代码中,@ControllerAdvice 注解用于标记异常处理器类,@ExceptionHandler 注解用于指定处理特定异常类型的方法。

注册异常处理器:

最后,在你的 Spring Boot 应用程序中,确保将异常处理器注册为一个 Spring Bean。你可以使用 @Bean 注解将异常处理器添加到 Spring 容器中:

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

@Configuration
public class AppConfig {

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

    // 添加其他配置
}

现在,当应用程序中抛出 CustomException 或其他异常时,全局异常处理器将会捕获并处理这些异常,并返回适当的错误响应。

通过以上步骤,在 Spring Cloud 中封装统一的异常处理逻辑,确保应用程序在出现异常时能够返回一致的错误响应,提高代码的可维护性和可读性。同时,也可以根据需要添加更多的异常处理方法,以处理不同类型的异常情况。

测试:

创建控制器 DemoController

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
@RequestMapping("/demo")
public class DemoController {

    @Autowired
    private DemoService demoService;

    @GetMapping("/hello")
    public String hello() {
        return "Hello, Spring Cloud!";
    }

    @PostMapping("/throw-custom-exception")
    public void throwCustomException(@RequestBody String message) {
        demoService.throwCustomException(message);
    }
}

创建 DemoService

import org.springframework.stereotype.Service;

@Service
public class DemoService {

    public void throwCustomException(String message) {
        if (message.equals("error")) {
            throw new CustomException("Custom exception occurred.");
        }
    }
}

测试控制器和异常处理器:

使用 Postman 或其他 API 调试工具,创建 POST 请求:

  • URL: http://localhost:8080/demo/throw-custom-exception
  • 请求体(JSON):"error"

你将得到一个类似如下的响应:

{
    "timestamp": "2023-08-08T08:00:00.000+00:00",
    "status": 400,
    "error": "Bad Request",
    "message": "Custom exception occurred.",
    "path": "/demo/throw-custom-exception"
}

这个响应是由异常处理器 GlobalExceptionHandler 返回的。

请确保你的 Spring Cloud 项目已经配置并启动,然后使用 Postman 模拟调用 /demo/throw-custom-exception 接口来触发自定义异常并验证统一的异常处理是否起作用。

请注意,这只是一个基本示例,可以根据实际需求在控制器和服务中添加更多的逻辑。同时,可能还需要配置 Spring Cloud 微服务架构的各个组件,以便正确运行。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值