在 Spring Cloud 微服务架构中,实现全局异常处理通常是通过使用 Spring Boot 提供的 @ControllerAdvice
和 @ExceptionHandler
注解来完成的。以下是一种实现方式:
-
创建全局异常处理类:
创建一个类并使用@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 处理不同类型的异常 }
-
配置异常返回格式(可选):
可以配置全局异常处理类返回的格式,例如,返回 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(); } }
-
定义自定义异常:
在应用中可以定义自己的异常类,继承自RuntimeException
或其子类,并添加自定义的异常信息。public class CustomException extends RuntimeException { public CustomException(String message) { super(message); } }
-
在业务代码中抛出异常:
在业务代码中,当发生需要处理的异常情况时,抛出自定义的异常。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