Spring Boot 2.x 系列教程:WebFlux REST API 全局异常处理 Error Handling

  • 时间:
  • 浏览:0
  • 来源:十分时时彩_去哪玩十分时时彩_哪里可以玩十分时时彩

摘要: 原创出处 https://www.bysocket.com 「公众号:泥瓦匠BYSocket 」欢迎关注和转载,保留摘要,谢谢!

本文内容

  • 为有哪些要全局异常正确处理?
  • WebFlux REST 全局异常正确处理实战
  • 小结

摘录:但是 了不断培养好习惯,同去不断打破坏习惯,大伙儿的行为举止才也能自始至终全部总要正确的。

一、为有哪些要全局异常正确处理?

前后端分抛下发,一般提供 REST API,正常返但是有响应体,异常情况下会有对应的错误码响应。

挺多人咨询的,Spring Boot MVC 异常正确处理用切面 @RestControllerAdvice 注解去实现去全局异常正确处理。那 WebFlux 怎么才能 才能 正确处理异常?怎么才能 才能 实现统一错误码异常正确处理?

全局异常正确处理的好处:

  • 异常错误码等统一维护
  • 正确处理或多或少重复代码

二、WebFlux REST 全局异常正确处理实战

下面介绍怎么才能 才能 统一拦截异常,进行响应正确处理。

2.1 工程信息

  • 运行环境:JDK 7 或 8,Maven 3.0+
  • 技术栈:SpringBoot 2.1.3
  • 代码地址:https://github.com/JeffLi1993/springboot-learning-example
  • 模块工程名: 2-x-spring-boot-webflux-handling-errors

工程组织结构:

application.properties 不须配置,默认即可

Application Spring Boot 应用启动类,是但是 用来启动 Spring Boot 应用。其饱含了 @SpringBootApplication 注解和 SpringApplication 类,并调用 SpringApplication 类的 run() 法律法律法律依据,就但是 启动该应用。

具体实现类的关系图如下:

2.2 CityRouter 路由器类

城市路由器代码如下:

RouterFunctions 对请求路由正确处理类,即将请求路由到正确处理器,这将有1个 GET 请求 /hello 路由到正确处理器 cityHandler 的 helloCity 法律法律法律依据上。跟 Spring MVC 模式下的 HandleMapping 类式。

RouterFunctions.route(RequestPredicate, HandlerFunction) 法律法律法律依据,对应的 参是请求参数和正确处理函数,肯能请求匹配,就调 对应的正确处理器函数。

2.3 CityHandler 服务正确处理类

城市服务器正确处理类,代码如下:

Mono:实现发布者,并返回 0 或 1 个元素,即单对象。Mono 是响应流 Publisher 具有基础 rx 操作符。但是 成功发布元素肯能错误。用 Mono 作为返回对象,是肯能返回饱含了有1个 ServerResponse 对象,而全部总要多个元素。

ServerResponse 是对响应的封装,但是 设置响应情况,响应头,响应正文。比如 ok 代表的是 30 响应码、MediaType 枚举是代表这文本内容类型、返回的是 String 的对象。

ServerRequest 是对请求的封装。从请求中甩掉 city 的值,肯能但是 了 一段话则抛出对应的异常。GlobalException 是封装的全局异常。

Mono.justOrEmpty():从有1个 Optional 对象或 null 对象中创建 Mono。

2.4 GlobalError 正确处理类

如图:

GlobalException 全局异常类,代码如下:

GlobalErrorAttributes 全局异常属性值类,代码如下:

重写了父类 DefaultErrorAttributes 默认错误属性类的 getErrorAttributes 获取错误属性法律法律法律依据,从服务请求封装 ServerRequest 中获取对应的异常。

却说我判断是不是 GlobalException,肯能是 CityHandler 服务正确处理类抛出的 GlobalException,则返回对应的异常的信息。

GlobalErrorWebExceptionHandler 全局异常正确处理类,代码如下:

代码解析如下:

  • AbstractErrorWebExceptionHandler 抽象类是用来正确处理全局错误时进行扩展和实现
  • @Order 注解标记 AspectJ 的切面排序,值越小拥有越高的优先级,这里设置优先级偏高。
  • 构造函数将 GlobalErrorAttributes 全局异常属性值类设置到 AbstractErrorWebExceptionHandler 抽象类的局部变量中。
  • 重写 getRoutingFunction 法律法律法律依据,设置对应的 RequestPredicates 和 Mono 服务响应对象
  • 将 GlobalErrorAttributes 的全局异常属性值 map,设置到新的 ServerResponse 即可。

到此基本但是开始。Spring Boot MVC 错误码怎么才能 才能 实战,参考地址:https://www.bysocket.com/archives/1692

2.5 运行验证

在 IDEA 中执行 Application 类启动,任意正常模式肯能 Debug 模式。却说我打开浏览器访问:

异常界面如下:

可见,这是在 CityHandler 城市服务正确处理类逻辑中抛出的全局异常信息。但是 了 正常情况会是怎么才能 才能 ?

改下 URL ,访问如下:

正常界面如下:

三、小结

在 Spring 框架中但是 了 代表错误响应的类,却说我返回响应对象,有1个 Map。肯能都要定义业务的错误码返回体,参考错误码怎么才能 才能 实战,参考地址:https://www.bysocket.com/archives/1692。

本文重点还是有别于 Spring Boot 传统 MVC 模式统一异常正确处理,实战了 WebFlux 全局异常正确处理机制。实战中这块扩展都要考虑:

  • 异常分层,从基类中扩展出来
  • 错误码设计分层,易扩展,比如在错误码中新增调用量字段…

代码示例

本文示例读者但是 通过查看下面仓库的中的模块工程名: 2-x-spring-boot-webflux-handling-errors:

  • Github:https://github.com/JeffLi1993/springboot-learning-example
  • Gitee:https://gitee.com/jeff1993/springboot-learning-example

肯能您对有有哪些感兴趣,欢迎 star、follow、收藏、转发给予支持!

参考资料

  • WebFlux REST API 全局异常正确处理:https://www.bysocket.com/archives/230
  • https://dzone.com/articles/exception-handling-in-spring-boot-webflux-reactive

以下专题教程也许您会有兴趣

  • 《Spring Boot 2.x 系列教程》 https://www.bysocket.com/springboot
  • 《Java 核心系列教程》 https://www.bysocket.com/archives/230

 

(关注微信公众号,领取 Java 精选干货学习资料)