对于业务层的程序的致命错误,我们一直的做法就是直接抛出指定的异常,让程序去终断,这种做法是对的,因为如果一个业务出现了致命的阻塞的问题,就没有必要再向上一层一层的返回了,但这时有个问题,直接抛异常,意味着服务器直接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~业务层刻意抛出异常,全局异常的捕获它并按格式返回相关推荐

  1. Spring MVC中@ControllerAdvice注解实现全局异常拦截

    Spring MVC中@ControllerAdvice注解实现全局异常拦截 参考文章: (1)Spring MVC中@ControllerAdvice注解实现全局异常拦截 (2)https://ww ...

  2. java 异常 过滤器_在过滤器Filter中抛出一个全局异常可以捕获的异常

    1.创建自定义异常 public class TokenException extends RuntimeException { private static final long serialVer ...

  3. python捕获全局异常统一管理_python中如何用sys.excepthook来对全局异常进行捕获、显示及输出到error日志中...

    使用sys.excepthook函数进行全局异常的获取. 1. 使用MessageDialog实现异常显示: 2. 使用logger把捕获的异常信息输出到日志中: 步骤:定义异常处理函数, 并使用该函 ...

  4. WinForm捕获全局异常(捕获未处理的异常)

    背景 我们在做WinForm程序的时候,一般都是对异常进行处理,但是,我们要防止不小心出现未知异常,导致软件崩溃.也可采集系统未知的异常信息,防止出现异常,也无法下手.于是就有了如这篇文章标题所述的一 ...

  5. Spring Boot2.x-11 使用@ControllerAdvice和@ExceptionHandler实现自定义全局异常

    文章目录 概述 未使用全局异常且未显式捕获异常的情况 使用全局异常 Step1. 自定义异常类 Step2. 封装异常信息模板 Step3. 全局异常处理类 Step4. 使用全局异常 小结 概述 我 ...

  6. java报错空指针异常_springboot全局异常捕获,真香

    全局异常捕获 什么是异常?程序在启动或者运行时没有按照预期的执行,在执行途中发生某种未知的错误,导致程序非正常停止或者报错. 在我们的程序中,肯定会伴随着很多的异常,启动时:空对象.找不到数据库.用户 ...

  7. 微服务架构之全局异常(@ControllerAdvice + @ExceptionHandler)

    微服务架构之全局异常处理 一.定义全局异常处理类(GlobalExceptionHandler) 1.在cloud-common模块中创建全局异常处理类GlobalExceptionHandler 2 ...

  8. Spring Boot 统一处理全局异常

    目录 注解的介绍 @ControllerAdvice @ExceptionHandler拦截异常并统一处理 代码实现 自定义异常 统一异常处理 前端返回值类 测试用例 如果本篇博客对您有一定的帮助,大 ...

  9. Net Core集成Exceptionless分布式日志功能以及全局异常过滤

    相信很多朋友都看过我的上篇关于Exceptionless的简单入门教程[asp.Net Core免费开源分布式异常日志收集框架Exceptionless安装配置以及简单使用图文教程][https:// ...

最新文章

  1. 方法总比困难多_只是为了生活
  2. Mongodb 基本操作
  3. custompage.width 不能小数吗_基金净值暴涨暴跌,背后的原因你清楚吗?
  4. 分享程序员提升自身能力的7个实用网站
  5. JAVA基础学习预科部分 (Markdown + dox)2021/2/22持续更新中
  6. linux生成随机密码的十种方法
  7. Ubuntu系统用户忘记密码
  8. 在window.onload中使用setTimeout
  9. AngularJS Directive 命名规则
  10. Java内部类(摘自Java就业培训教程)
  11. 虚拟机没有显示ip地址
  12. Micropython——基于PYB的霍尔编码器电机的PID控制
  13. 一个检测PC机软硬件系统信息的工具——EVEREST
  14. 保研面试问题(英文)
  15. 微信小程序之发送表情和文字和语音之php
  16. 微信小程序实现类似微信评论区回复组件(mpx)
  17. 服务器卡logo显示2f,战争机器4卡LOGO界面解决办法
  18. 拼多多API接口大全
  19. Linux上杀毒软件有哪些?
  20. Codeforces Round #702 (Div. 3)——B

热门文章

  1. 关于(我们流量表优化),分区表数据块过多,聚合又导致数据倾斜问题
  2. SpringBoot系列: CommandLineRunner接口的用处
  3. c++刷题(18/100)树
  4. java:去除字符串中空格 、 oracle (+) 、 mysql中数值运算符和函数
  5. NodeJS(四)Mac下如何安装package.json里面会产生依赖项
  6. Android项目中如何用好构建神器Gradle?
  7. [Err] 1231 - Variable 'sql_mode' can't be set to the value of 'NULL
  8. li标签之间的空隙问题(转)
  9. sqlplus(数据泵)导入导出dmp实践使用
  10. PyQt5笔记(08) – 输入对话框