curl -X GET http://localhost:8080/api/products/123响应:{"statusCode": 404,"message": "Product not found with ID: 123"}解释:- 测试请求尝试获取一个在系统中不存在的产品的信息 , 例如ID为123的产品 。
- 结果导致服务层抛出ProductNotFoundException异常 。
- 标记为@ControllerAdvice的全局异常处理器捕获该异常,并构建一个包含404状态码和自定义错误消息的JSON格式错误响应 。
(1) 控制器层:
客户端(例如Web浏览器或REST客户端)向Spring应用程序发出请求,通常是向公开的HTTP端点发送请求 。
(2) 控制器方法执行:
Spring MVC框架根据请求映射注解(如@GetMapping或@PostMapping)将传入的请求路由到适当的控制器方法 。
控制器方法执行并执行其业务逻辑 。
(3) 异常发生:
在执行控制器方法的过程中 , 由于各种原因可能会抛出异常 。这可能是由于业务逻辑错误、验证失败或任何其他意外问题 。
4 异常传播:
一旦在控制器方法内部抛出异常,它就会开始沿着调用堆栈向上传播 。
(55) @ControllerAdvice类:
异常向上传播,直到达到使用@ControllerAdvice注解的全局异常处理器类为止 。
(6) @ExceptionHandler方法:
在@ControllerAdvice类中 , 定义了一个或多个@ExceptionHandler方法来处理特定类型的异常 。
(7) 匹配异常处理器:
Spring框架根据方法的参数类型识别出适当的@ExceptionHandler方法来处理特定的异常类型 。
(8) 异常处理:
匹配的@ExceptionHandler方法执行以处理异常 。
此方法可以执行诸如记录错误、构建错误响应或执行任何其他自定义操作的任务 。
(9) 生成响应:
@ExceptionHandler方法通常生成一个错误响应,可以是JSON响应、html页面或任何其他响应格式 。
(10) 响应发送给客户端:
由@ExceptionHandler方法生成的错误响应发送回原始请求的客户端 。
(11) 客户端接收错误响应:
客户端接收错误响应,并根据需要处理错误信息 。例如,它可以向用户显示错误消息或以编程方式处理错误 。
推荐阅读
- Spring Boot是如何处理HTTP请求的?
- Spring Cloud 微服务系列之 ShardingSphere-Proxy 数据库代理
- Spring Cloud Gateway提供的简易网关实现方式,你使用过吗?
- SpringBoot拦截器和动态代理有什么区别?
- 详解Spring支持的各种数据类型的注入,你都用过哪些?
- RestTemplate详解 Springboot — 用更优雅的方式发HTTP请求
- ELK 处理 Spring Boot 日志,不错!
- Spring中这两个对象ObjectFactory与FactoryBean接口你使用过吗?
- pringBoot如何实现热部署?
- Spring定义Controller接口的这些方式你肯定不知道
