爱上MVC~业务层刻意抛出异常,全局异常的捕获它并按格式返回
对于业务层的程序的致命错误,我们一直的做法就是直接抛出指定的异常,让程序去终断,这种做法是对的,因为如果一个业务出现了致命的阻塞的问题,就没有必要再向上一层一层的返回了,但这时有个问题,直接抛异常,意味着服务器直接500了,前端如何去显示,或者如果你是API的服务,如果为前端返回,如果是500,那直接就挂了,哈哈!
下面是在MVC环境下优化的全局异常捕获代码(非API)
/// <summary>/// 全局异常捕获/// </summary>public class GlobalExceptionFilterAttribute : HandleErrorAttribute{public override void OnException(ExceptionContext context){JsonResult response = new JsonResult(){JsonRequestBehavior = JsonRequestBehavior.AllowGet};if (context.Exception is ArgumentException){var exception = (ArgumentException)context.Exception;response.Data = new{statusCode = System.Net.HttpStatusCode.InternalServerError,errorcode = "02",message = exception.Message,};}else if (context.Exception is Exception){var exception = (Exception)context.Exception;response.Data = new{statusCode = System.Net.HttpStatusCode.InternalServerError,errorcode = "01",message = exception.Message,};}else{response.Data = new{statusCode = System.Net.HttpStatusCode.InternalServerError,errorcode = "03",message = "其它异常",};}context.Result = response;context.ExceptionHandled = true;context.HttpContext.Response.Clear();context.HttpContext.Response.TrySkipIisCustomErrors = true;}}
如果业务层有问题,直接就throw了
if (id == 0)throw new ArgumentException("id不能为0");if (id < 0)throw new ArgumentException("id不能是负数");
然后页面后,故意让它抛出异常,我们看一下页面响应的结果
事实上,对于服务器来说,它是200,正常返回的,而对不业务模块来说,它的状态是个500,呵呵,这点要清楚.
感谢各位阅读!
本文转自博客园张占岭(仓储大叔)的博客,原文链接:爱上MVC~业务层刻意抛出异常,全局异常的捕获它并按格式返回,如需转载请自行联系原博主。
爱上MVC~业务层刻意抛出异常,全局异常的捕获它并按格式返回相关推荐
- Spring MVC中@ControllerAdvice注解实现全局异常拦截
Spring MVC中@ControllerAdvice注解实现全局异常拦截 参考文章: (1)Spring MVC中@ControllerAdvice注解实现全局异常拦截 (2)https://ww ...
- java 异常 过滤器_在过滤器Filter中抛出一个全局异常可以捕获的异常
1.创建自定义异常 public class TokenException extends RuntimeException { private static final long serialVer ...
- python捕获全局异常统一管理_python中如何用sys.excepthook来对全局异常进行捕获、显示及输出到error日志中...
使用sys.excepthook函数进行全局异常的获取. 1. 使用MessageDialog实现异常显示: 2. 使用logger把捕获的异常信息输出到日志中: 步骤:定义异常处理函数, 并使用该函 ...
- WinForm捕获全局异常(捕获未处理的异常)
背景 我们在做WinForm程序的时候,一般都是对异常进行处理,但是,我们要防止不小心出现未知异常,导致软件崩溃.也可采集系统未知的异常信息,防止出现异常,也无法下手.于是就有了如这篇文章标题所述的一 ...
- Spring Boot2.x-11 使用@ControllerAdvice和@ExceptionHandler实现自定义全局异常
文章目录 概述 未使用全局异常且未显式捕获异常的情况 使用全局异常 Step1. 自定义异常类 Step2. 封装异常信息模板 Step3. 全局异常处理类 Step4. 使用全局异常 小结 概述 我 ...
- java报错空指针异常_springboot全局异常捕获,真香
全局异常捕获 什么是异常?程序在启动或者运行时没有按照预期的执行,在执行途中发生某种未知的错误,导致程序非正常停止或者报错. 在我们的程序中,肯定会伴随着很多的异常,启动时:空对象.找不到数据库.用户 ...
- 微服务架构之全局异常(@ControllerAdvice + @ExceptionHandler)
微服务架构之全局异常处理 一.定义全局异常处理类(GlobalExceptionHandler) 1.在cloud-common模块中创建全局异常处理类GlobalExceptionHandler 2 ...
- Spring Boot 统一处理全局异常
目录 注解的介绍 @ControllerAdvice @ExceptionHandler拦截异常并统一处理 代码实现 自定义异常 统一异常处理 前端返回值类 测试用例 如果本篇博客对您有一定的帮助,大 ...
- Net Core集成Exceptionless分布式日志功能以及全局异常过滤
相信很多朋友都看过我的上篇关于Exceptionless的简单入门教程[asp.Net Core免费开源分布式异常日志收集框架Exceptionless安装配置以及简单使用图文教程][https:// ...
最新文章
- 方法总比困难多_只是为了生活
- Mongodb 基本操作
- custompage.width 不能小数吗_基金净值暴涨暴跌,背后的原因你清楚吗?
- 分享程序员提升自身能力的7个实用网站
- JAVA基础学习预科部分 (Markdown + dox)2021/2/22持续更新中
- linux生成随机密码的十种方法
- Ubuntu系统用户忘记密码
- 在window.onload中使用setTimeout
- AngularJS Directive 命名规则
- Java内部类(摘自Java就业培训教程)
- 虚拟机没有显示ip地址
- Micropython——基于PYB的霍尔编码器电机的PID控制
- 一个检测PC机软硬件系统信息的工具——EVEREST
- 保研面试问题(英文)
- 微信小程序之发送表情和文字和语音之php
- 微信小程序实现类似微信评论区回复组件(mpx)
- 服务器卡logo显示2f,战争机器4卡LOGO界面解决办法
- 拼多多API接口大全
- Linux上杀毒软件有哪些?
- Codeforces Round #702 (Div. 3)——B
热门文章
- 关于(我们流量表优化),分区表数据块过多,聚合又导致数据倾斜问题
- SpringBoot系列: CommandLineRunner接口的用处
- c++刷题(18/100)树
- java:去除字符串中空格 、 oracle (+) 、 mysql中数值运算符和函数
- NodeJS(四)Mac下如何安装package.json里面会产生依赖项
- Android项目中如何用好构建神器Gradle?
- [Err] 1231 - Variable 'sql_mode' can't be set to the value of 'NULL
- li标签之间的空隙问题(转)
- sqlplus(数据泵)导入导出dmp实践使用
- PyQt5笔记(08) – 输入对话框