在 Spring Cloud 微服务架构中,实现全局异常处理通常是通过使用 Spring Boot 提供的 @ControllerAdvice@ExceptionHandler 注解来完成的。以下是一种实现方式:

  1. 创建全局异常处理类:
    创建一个类并使用 @ControllerAdvice 注解标注,同时定义 @ExceptionHandler 方法来处理特定类型的异常。这个类将捕获所有被 @Controller 标注的类中抛出的异常。

    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(Exception.class)
        public ResponseEntity<String> handleException(Exception e) {
            // 处理异常逻辑,可以记录日志等
            return new ResponseEntity<>("An error occurred: " + e.getMessage(), HttpStatus.INTERNAL_SERVER_ERROR);
        }
    
        // 可以定义其他 @ExceptionHandler 处理不同类型的异常
    }
    
  2. 配置异常返回格式(可选):
    可以配置全局异常处理类返回的格式,例如,返回 JSON 格式的错误信息。

    import org.springframework.context.annotation.Bean;
    import org.springframework.context.annotation.Configuration;
    import org.springframework.http.converter.json.MappingJackson2HttpMessageConverter;
    
    @Configuration
    public class WebConfig {
    
        @Bean
        public MappingJackson2HttpMessageConverter customJsonMessageConverter() {
            return new CustomJsonMessageConverter();
        }
    }
    
  3. 定义自定义异常:
    在应用中可以定义自己的异常类,继承自 RuntimeException 或其子类,并添加自定义的异常信息。

    public class CustomException extends RuntimeException {
    
        public CustomException(String message) {
            super(message);
        }
    }
    
  4. 在业务代码中抛出异常:
    在业务代码中,当发生需要处理的异常情况时,抛出自定义的异常。

    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.http.ResponseEntity;
    import org.springframework.web.bind.annotation.GetMapping;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.RestController;
    
    @RestController
    @RequestMapping("/example")
    public class ExampleController {
    
        @Autowired
        private ExampleService exampleService;
    
        @GetMapping("/trigger-error")
        public ResponseEntity<String> triggerError() {
            // 业务逻辑中发生异常
            exampleService.performAction();
            return ResponseEntity.ok("Success");
        }
    }
    

通过上述步骤,当业务代码中抛出异常时,全局异常处理类将捕获该异常,并根据 @ExceptionHandler 方法的逻辑返回自定义的错误信息和状态码。这有助于在整个微服务架构中实现统一的全局异常处理。

Was this helpful?

0 / 0

发表回复 0

Your email address will not be published.