写在开始前---web异常处理
分层项目中,有上层调用下层,每一层都可能出错,比如数据库连接,文件读写等异常。除了运行时程序的异常,还有业务逻辑的一些问题。发生异常需要做一定处理,既要让开发人员便于排查问题,又要让用户看到友好又便于理解的信息。
对于底层连接数据库,操作数据库的数据层,异常捕捉后,可以记录日志,日志可以是当前文件,行号,sql语句,参数,错误的详情等。然后再往上层抛异常,在控制器层捕捉,判断后返回给用户客户端恰当的便于理解的错误信息。这个信息是根据业务模块功能具体来确定的。比如用户模块的新增功能,当用户名重复的时候,可以提示‘用户名已存在’,比‘操作失败,请重试’要直观,当然这是业务逻辑的异常,程序异常也类似。
通常可以自定义自己的异常类型,作为底层的异常抛到上层去。上层可以集中配置一个异常信息对照表,或错误码表,根据返回的异常,查找对应的用户提示信息,并返回。
常见的控制层代码段如下:
try{
//model();
}catch(Exception e){
//print();
//log('文件-行号-异常信息');
//return '根据e的类型,返回用户友好的信息提示';
}
每个controller都有类似的代码,所以可以把这个处理逻辑搬到拦截器或者调度器里,然后根据异常类型或异常错误号,再对应集中返回信息。
至于log记录,则根据情况来分析,实际业务访问量,系统规模架构等都有很大影响。一般是记录在文件,队列,日志型数据库等。
层层抛出、上层捕捉、详情记录、友好返回、异常信息对照表
写在开始前---web异常处理的更多相关文章
- 写在开始前---web前后端对接
现阶段接口对接问题: 1.接口乱,不清晰明了,无文档或文档过期 2.接口和业务不匹配.不可用 3.前后端沟通,工程复杂化 4.不能深入了解业务 5.任务延期 注:前后端对业务深入了解,接口之间都是有联 ...
- 用Python写一个简单的Web框架
一.概述 二.从demo_app开始 三.WSGI中的application 四.区分URL 五.重构 1.正则匹配URL 2.DRY 3.抽象出框架 六.参考 一.概述 在Python中,WSGI( ...
- PyQt写的浏览单web页面的browser - 开源中国社区
PyQt写的浏览单web页面的browser - 开源中国社区 PyQt写的浏览单web页面的browser
- 动手写一个简单的Web框架(模板渲染)
动手写一个简单的Web框架(模板渲染) 在百度上搜索jinja2,显示的大部分内容都是jinja2的渲染语法,这个不是Web框架需要做的事,最终,居然在Werkzeug的官方文档里找到模板渲染的代码. ...
- 动手写一个简单的Web框架(Werkzeug路由问题)
动手写一个简单的Web框架(Werkzeug路由问题) 继承上一篇博客,实现了HelloWorld,但是这并不是一个Web框架,只是自己手写的一个程序,别人是无法通过自己定义路由和返回文本,来使用的, ...
- 动手写一个简单的Web框架(HelloWorld的实现)
动手写一个简单的Web框架(HelloWorld的实现) 关于python的wsgi问题可以看这篇博客 我就不具体阐述了,简单来说,wsgi标准需要我们提供一个可以被调用的python程序,可以实函数 ...
- 如何用PHP/MySQL为 iOS App 写一个简单的web服务器(译) PART1
原文:http://www.raywenderlich.com/2941/how-to-write-a-simple-phpmysql-web-service-for-an-ios-app 作为一个i ...
- [翻译]如何用YII写出安全的WEB应用
前言 虽然本文是基于YII1.1,但其中提到的安全措施适用于多数web项目安全场景,所以翻译此文,跟大家交流.原文地址. 目录 安全基本措施... 2 验证与过滤用户的输入信息... 2 原理... ...
- 一文带你掌握Spring Web异常处理方式
一.前言 大家好,我是 去哪里吃鱼 ,也叫小张. 最近从单位离职了,离开了五年多来朝朝夕夕皆灯火辉煌的某网,激情也好悲凉也罢,觥筹场上屡屡物是人非,调转过事业部以为能换种情绪,岂料和下了周五的班的前同 ...
随机推荐
- java第二周的学习知识4(对原码,补码,反码和java中浮点数计算不准确的总结)
原码:一个正数,转换为二进制位就是这个正数的原码.负数的绝对值转换成二进制位然后在高位补1就是这个负数的原码. 但是原码有几个缺点,零分两种 +0 和 -0 .很奇怪是吧!还有,在进行不同符号的加法运 ...
- Java 集合总体框架介绍
Java集合是java提供的工具包,包含了常用的数据结构:集合.链表.队列.栈.数组.映射等.Java集合工具包位置是java.util.*Java集合主要可以划分为4个部分:List列表.Set集合 ...
- 35、concurrent.futures模块与协程
concurrent.futures —Launching parallel tasks concurrent.futures模块同时提供了进程池和线程池,它是将来的使用趋势,同样我们之前学习 ...
- oracle--Tracing PL/SQL subprogram calls with parameters values--Mahmoud Hatem,
https://mahmoudhatem.wordpress.com/2017/09/15/geeky-plsql-tracerprofiler-first-step/ https://mahmoud ...
- bat获取文件夹里面所有文件夹的名称方法
创建一个123.txt文档,修改名称为123.bat 里面填写内容如下: DIR *.* /B >文件名清单.TXT 保存,双击执行即可获取生成文件夹名称的txt文档
- Spring Boot 中application.yml与bootstrap.yml的区别
其实yml和properties文件是一样的原理,且一个项目上要么yml或者properties,二选一的存在. 推荐使用yml,更简洁. bootstrap与application1.加载顺序这里主 ...
- Glide4 用法总结 MD
Markdown版本笔记 我的GitHub首页 我的博客 我的微信 我的邮箱 MyAndroidBlogs baiqiantao baiqiantao bqt20094 baiqiantao@sina ...
- C#退出程序,退出任务管理器
//窗体关闭之前 this.FormClosing += (s, r) => { System.Environment.Exit(0); }; //窗体关闭 this.Closed += (s, ...
- grid - 网格轨道对齐方式
网格轨道对齐可以相对于网格容器行和列轴. align-content指定网格轨道沿着行轴对齐方式:justify-content指定网格轨道沿着列轴对齐方式.它们支持下面属性: normal star ...
- 树莓派raspberry pi配置无线路由器AP
raspi-config进入系统配置面板 进行 Expand Filesystem 扩展文件系统否则备份系统的时候备份文件会急速膨胀. (1)配置网络环境nano /etc/network/inte ...