自定义Exception:MVC抛出自定义异常,并以Json方式返回
优点:
可以统一处理所有页面的异常,对所有需要返回json数据的异常,都用同样的方法throw new DVMException()。页面展示,controller的错误处理方式一样
节省编码时间,不用针对每一个controller编写错误json
throw new DVMException()可以不仅出现在调用层级更深的其他方法中
编码格式统一
自定义Exception:
/// <summary>
/// NewCRM异常
/// </summary>
public class DVMException : Exception
{
/// <summary>
/// 操作结果
/// </summary>
public OPResult Result { get; set; } /// <summary>
/// 构造函数
/// </summary>
/// <param name="opr">操作结果</param>
/// <param name="message">消息内容</param>
public DVMException(OPResult opr, String message)
: base(message)
{ Result = opr;
} /// <summary>
/// 构造函数
/// </summary>
/// <param name="opr">返回代码</param>
/// <param name="message">错误消息</param>
/// <param name="e">原始异常</param>
public DVMException(OPResult opr, String message, Exception e)
: base(message, e)
{
Result = opr;
} /// <summary>
/// 构造函数
/// </summary>
/// <param name="message">消息内容</param>
/// <param name="e">异常栈</param>
public DVMException(String message, Exception e)
: base(message, e)
{
Result = OPResult.ServerError;
} /// <summary>
/// 构造函数
/// </summary>
/// <param name="e">异常堆栈</param>
public DVMException(Exception e)
: base("Server Operation Failed", e)
{
Result = OPResult.ServerError;
}
} /// <summary>
/// 操作结果
/// </summary>
public class DVMOPResult
{
/// <summary>
/// 操作是否成功
/// </summary>
public Boolean OPSucess { get; set; }
/// <summary>
/// 结果代码
/// </summary>
public OPResult OPCode { get; set; }
/// <summary>
/// 操作结果,类型可变,由Type进行判断
/// </summary>
public Object ResultContent { get; set; }
/// <summary>
/// 返回类型名称
/// </summary>
public String Type { get; set; } /// <summary>
/// 返回是否为数组
/// </summary>
public Boolean IsArray { get; set; }
}
public class HandleJsonExceptionAttribute:HandleErrorAttribute
{
public override void OnException(ExceptionContext filterContext)
{
var logger = IocFactory.Instance.GetInstance<ILogBase>();
var exception = filterContext.Exception;
var url = filterContext.HttpContext.Request.RawUrl;
String message = exception.Message;
logger.Error(String.Format("Request error on url {0}: {1}", url, message), exception);
JsonResult jsonResult = new JsonResult() { MaxJsonLength = Int32.MaxValue };
jsonResult.Data = message;
filterContext.Result = jsonResult;
filterContext.ExceptionHandled = true;
}
}
controller中使用:[HandleJsonException]
[HttpPost]
[HandleJsonException]
public ActionResult Save(SaveAccountRequest request)
{
var accountDTO = request as AccountDTO;
FixRatePost(ref accountDTO);
request.UserId = this.CurrentUser.UserId;
var id =_accountService.SaveAccount(request);
if (id < 0)
{
throw new DVMException(OPResult.ServerError, "此账户已存在并启用,无法重复创建");
}
return new JsonResult { Data = true };
}
View展示异常:ajax的error处理
postCreation: function (successMessage) {
$.ajax({
data: $("form").serialize(),
url: "@Url.Content("~/Account/Save")",
type: 'POST',
dataType: 'json',
cache: false,
success: function (data) {
if (data.toString() == "true") {
$.Dialog({
overlay: true,
shadow: true,
flat: false,
icon: '',
width: 330,
content: '<div class="" style="text-align:left;padding:10px;font-size:16px;">' + successMessage + '</div>'
+ '<div class="size4 text-right">'
+ '<button class="warning" id="comfirm"><i class="icon-checkmark on-left"></i>关闭</button> '
+ '</div>',
overlayClickClose: false,
onShow: function (_dialog) {
$("#comfirm", $(_dialog)).click(function () {
//保存成功返回列表页
$("#cancel").click();
})
}
});
} else {
showAlert(data);
};
freezeButton(false);
},
error: function (data) {
showAlert(data);
freezeButton(false);
}
});
}
自定义Exception:MVC抛出自定义异常,并以Json方式返回的更多相关文章
- 抛出自定义异常,spring AOP事务不回滚的解决方案
spring AOP 默认对RuntimeException()异常或是其子类进行事务回滚,也就是说 事务回滚:throw new RuntimeException("xxxxxxxxxxx ...
- SQL Server 抛出自定义异常,由C#程序俘获之并进行相应的处理
最近一直在找可以自定义异常,并用C#程序捕获并进行相应的处理,试了很多方法都没有成功.今天终于找到了不错的方法.所以转载并分享给大家. 摘自:http://www.cnblogs.com/scottc ...
- 当WebView运行在特权进程时抛出安全异常,Hook方式解决方案(包含对Android 8.0的处理)
1.问题起源报错语句是:java.lang.UnsupportedOperationException: For security reasons, WebView is not allowed in ...
- python7.2抛出自定义异常
pwd="123456"if len(pwd)<8: ex= Exception("密码不能低于8位数!")#自定义异常 raise ex #抛出自定义的 ...
- Python强制抛出自定义异常
raise Exception("My Exception") 当程序运行到这行时,会抛出异常,打印出Exception: My Exception
- 采购订单写入sap失败后,抛出自定义异常,回滚数据库
@Transactional(rollbackFor = Exception.class) @Override public Map<String,Object> getOderInfo( ...
- springmvc在处理请求过程中出现异常信息交由异常处理器进行处理,自定义异常处理器可以实现一个系统的异常处理逻辑。为了区别不同的异常通常根据异常类型自定义异常类,这里我们创建一个自定义系统异常,如果controller、service、dao抛出此类异常说明是系统预期处理的异常信息。
springmvc在处理请求过程中出现异常信息交由异常处理器进行处理,自定义异常处理器可以实现一个系统的异常处理逻辑. 1.1 异常处理思路 系统中异常包括两类:预期异常和运行时异常RuntimeEx ...
- java异常处理:建立exception包,建立Bank类,类中有变量double balance表示存款,Bank类的构造方法能增加存款,Bank类中有取款的发方法withDrawal(double dAmount),当取款的数额大于存款时,抛出InsufficientFundsException,取款数额为负数,抛出NagativeFundsException,如new Bank(100),
建立exception包,建立Bank类,类中有变量double balance表示存款,Bank类的构造方法能增加存款,Bank类中有取款的发方法withDrawal(double dAmount ...
- 【优化】自定义抛出throw 对象练习
package ltb6w; import java.util.*; public class Bank { private boolean bool=true; private String sel ...
随机推荐
- 多线程(threading)示例
一.多线程简单示例 import threading,time print('第一线程(默认):程序开始啦!') def takeANap(): time.sleep(5) print('第二线程:5 ...
- 设计模式之Mediator(中介者)(转)
Mediator定义: 用一个中介对象来封装一系列关于对象交互行为. 为何使用Mediator? 各个对象之间的交互操作非常多;每个对象的行为操作都依赖彼此对方,修改一个对象的行为,同时会涉及到修改很 ...
- 特定条件下批量解压文件改变编码,顺便修改.so.0找不到等一些小问题
直接结论: 1.linux解压文件乱码: unzip -O GBK *.zip 2.linux改变文件内容编码: 安装enca,下载地址:https://github.com/nijel/enca/i ...
- window下安装cross-env解决NODE_ENV ts-node 不是内部或外部命令,也不是可运行的程序 或批处理文件 问题
window下安装cross-env解决NODE_ENV ts-node 不是内部或外部命令,也不是可运行的程序 或批处理文件 问题 在git bash上启动无法进行调试,采用cross-env后可以 ...
- php CI框架中URL特殊字符处理与SQL注入隐患
php CI框架中URL特殊字符处理与SQL注入隐患 php CI框架中URL特殊字符有很多是不支持的,导致像c++,括号这些常用的分类,字符都无法正常显示很头痛,而在配置里增加单引号' 反斜杠\ 这 ...
- centos安装angr
1.angr环境 yum install -y python-dev libffi-dev build-essential virtualenvwrapper mkvirtualenv angr 问题 ...
- UVALive 3295 Counting Triangles
题目链接:https://icpcarchive.ecs.baylor.edu/index.php?option=com_onlinejudge&Itemid=8&page=show_ ...
- 洛谷 P1010 幂次方
做了好久,递归拆吧 #include<iostream>#include<cstdio>#include<cmath>using namespace std;int ...
- 从源码层面聊聊面试问烂了的 Spring AOP与SpringMVC
Spring AOP ,SpringMVC ,这两个应该是国内面试必问题,网上有很多答案,其实背背就可以.但今天笔者带大家一起深入浅出源码,看看他的原理.以期让印象更加深刻,面试的时候游刃有余. Sp ...
- 使用WebClient下载网页,用正则匹配需要的内容
WebClient是一个操作网页的类 webClient web=new WebClient(): web.DownloadString(网页的路径,可以是本地路径);--采用的本机默认的编码格式 ...