博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
spring 5 webflux异常处理
阅读量:5991 次
发布时间:2019-06-20

本文共 2521 字,大约阅读时间需要 8 分钟。

本文主要研究一下spring 5 webflux的异常处理

maven

org.springframework.boot
spring-boot-starter-webflux
复制代码

ExceptionHandler

由于webflux也支持传统spring mvc的大部分注解,因此原来的ExceptionHandler也是支持的。

@RestControllerAdvicepublic class ExceptionHandlers {    private static final Logger LOGGER = LoggerFactory.getLogger(ExceptionHandlers.class);    @ExceptionHandler(Exception.class)    @ResponseStatus(HttpStatus.INTERNAL_SERVER_ERROR)    public String serverExceptionHandler(Exception ex) {        LOGGER.error(ex.getMessage(),ex);        return ex.getMessage();    }}复制代码

启动的时候可以看到日志

2018-02-12 19:26:03.249  INFO 7053 --- [           main] o.s.w.r.r.m.a.ControllerMethodResolver   : Looking for @ControllerAdvice: org.springframework.boot.web.reactive.context.AnnotationConfigReactiveWebServerApplicationContext@65d09a04: startup date [Mon Feb 12 19:25:59 CST 2018]; root of context hierarchy2018-02-12 19:26:03.281  INFO 7053 --- [           main] o.s.w.r.r.m.a.ControllerMethodResolver   : Detected @ExceptionHandler methods in exceptionHandlers复制代码

spring-webflux-5.0.2.RELEASE-sources.jar!/org/springframework/web/reactive/result/method/annotation/ControllerMethodResolver.java

/** * Package-private class to assist {@link RequestMappingHandlerAdapter} with * resolving, initializing, and caching annotated methods declared in * {@code @Controller} and {@code @ControllerAdvice} components: * 
    *
  • {@code @InitBinder} *
  • {@code @ModelAttribute} *
  • {@code @RequestMapping} *
  • {@code @ExceptionHandler} *
* * @author Rossen Stoyanchev * @since 5.0 */class ControllerMethodResolver { private static Log logger = LogFactory.getLog(ControllerMethodResolver.class); private final List
initBinderResolvers; private final List
modelAttributeResolvers; private final List
requestMappingResolvers; private final List
exceptionHandlerResolvers; private final ReactiveAdapterRegistry reactiveAdapterRegistry; //......}复制代码

可以看到支持InitBinder,ModelAttribute,RequestMapping,ExceptionHandler这几个注解。

实例

@GetMapping(value = "/error",produces = MediaType.APPLICATION_JSON_UTF8_VALUE)    public Mono
exceptionReturn(){// throw new RuntimeException("hello"); return Mono.error(new RuntimeException("test error")); }复制代码

与传统mvc不同的是,除了直接throw异常外,Mono或Flux可以直接error一个异常,在exceptionHandlers都可以被接收处理

小结

webflux支持mvc的注解,是一个非常便利的功能,相比较于RouteFunction,自动扫描注册比较省事。异常处理可以沿用ExceptionHandler。

转载地址:http://rkxlx.baihongyu.com/

你可能感兴趣的文章
《好学的C++程序设计》——1.1 计算机怎样计数
查看>>
Docker技术入门与实战(第2版)3.2 查看镜像信息
查看>>
《妥协的完美主义:优秀产品经理的实践指南(卷二)》一2.3 团队内部组织管理...
查看>>
《Ansible权威指南 》一1.3 为什么选择Ansible
查看>>
《STM32库开发实战指南:基于STM32F4》----3.2 STM32能做什么
查看>>
《Adobe Flash CS5中文版经典教程》——1.14复习
查看>>
《 短文本数据理解》——1.3短文本理解框架
查看>>
oracle中使用SQL递归语句
查看>>
《HTML5移动Web开发实战》—— 1.2 确定网站的适用移动设备
查看>>
《C++ 黑客编程揭秘与防范(第2版)》——6.3 PE结构的3种地址
查看>>
一位真正的科学思想家: 纪念人工智能之父Marvin Minsky教授
查看>>
《JavaScript设计与开发新思维》——2.4 关键的开发方法
查看>>
IDG2016TMT战略:大量资本将投向人工智能、消费升级、泛娱乐
查看>>
《精通移动App测试实战:技术、工具和案例》一2.2 JUnit在Android开发中的应用...
查看>>
MSSQL · 应用案例 · 构建死锁自动收集系统
查看>>
《Docker生产环境实践指南》——2.5 部署
查看>>
经历:我被网络公司坑了之后用上了阿里云
查看>>
盘点:阿里巴巴的安全能力究竟是什么水平?
查看>>
《C语言及程序设计》实践参考——学生成绩统计
查看>>
简明Python教程学习笔记_7_输入输出
查看>>