相关链接

优点:

  可以统一处理所有页面的异常,对所有需要返回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; }
}

  

自定义HandleErrorAttribute

     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方式返回的更多相关文章

  1. 抛出自定义异常,spring AOP事务不回滚的解决方案

    spring AOP 默认对RuntimeException()异常或是其子类进行事务回滚,也就是说 事务回滚:throw new RuntimeException("xxxxxxxxxxx ...

  2. SQL Server 抛出自定义异常,由C#程序俘获之并进行相应的处理

    最近一直在找可以自定义异常,并用C#程序捕获并进行相应的处理,试了很多方法都没有成功.今天终于找到了不错的方法.所以转载并分享给大家. 摘自:http://www.cnblogs.com/scottc ...

  3. 当WebView运行在特权进程时抛出安全异常,Hook方式解决方案(包含对Android 8.0的处理)

    1.问题起源报错语句是:java.lang.UnsupportedOperationException: For security reasons, WebView is not allowed in ...

  4. python7.2抛出自定义异常

    pwd="123456"if len(pwd)<8: ex= Exception("密码不能低于8位数!")#自定义异常 raise ex #抛出自定义的 ...

  5. Python强制抛出自定义异常

    raise Exception("My Exception") 当程序运行到这行时,会抛出异常,打印出Exception: My Exception

  6. 采购订单写入sap失败后,抛出自定义异常,回滚数据库

    @Transactional(rollbackFor = Exception.class) @Override public Map<String,Object> getOderInfo( ...

  7. springmvc在处理请求过程中出现异常信息交由异常处理器进行处理,自定义异常处理器可以实现一个系统的异常处理逻辑。为了区别不同的异常通常根据异常类型自定义异常类,这里我们创建一个自定义系统异常,如果controller、service、dao抛出此类异常说明是系统预期处理的异常信息。

    springmvc在处理请求过程中出现异常信息交由异常处理器进行处理,自定义异常处理器可以实现一个系统的异常处理逻辑. 1.1 异常处理思路 系统中异常包括两类:预期异常和运行时异常RuntimeEx ...

  8. java异常处理:建立exception包,建立Bank类,类中有变量double balance表示存款,Bank类的构造方法能增加存款,Bank类中有取款的发方法withDrawal(double dAmount),当取款的数额大于存款时,抛出InsufficientFundsException,取款数额为负数,抛出NagativeFundsException,如new Bank(100),

    建立exception包,建立Bank类,类中有变量double  balance表示存款,Bank类的构造方法能增加存款,Bank类中有取款的发方法withDrawal(double dAmount ...

  9. 【优化】自定义抛出throw 对象练习

    package ltb6w; import java.util.*; public class Bank { private boolean bool=true; private String sel ...

随机推荐

  1. Jersey入门——对Json的支持

    Jersey rest接口对POJO的支持如下: package com.coshaho.learn.jersey; import java.net.URI; import javax.ws.rs.C ...

  2. Linux上查看大文件的开头几行内容以及结尾几行的内容

    head -n 50 filePath 查看开头50行的内容 tail -n 50 filePath 查看文件结尾50行的内容

  3. oracle表分区、表分析及oracle数据泵文件导入导出

    1.先说oracle表分区是什么吧 你有500万份文件,你要把他存在磁盘上,好嘛,我们就一个文件夹,500万分文件在那儿杵着,我们想找到要的那个打开,嘿嘿,我们得找到什么时候. 这时候,有个人告诉你, ...

  4. linux内核的双链表list_head、散列表hlist_head

    一.双链表list_head 1.基本概念 linux内核提供的标准链表可用于将任何类型的数据结构彼此链接起来. 不是数据内嵌到链表中,而是把链表内嵌到数据对象中. 即:加入链表的数据结构必须包含一个 ...

  5. 75.Java异常处理机制throws

    package testDate; import java.io.FileNotFoundException; import java.io.FileReader; import java.io.IO ...

  6. 事务 c#

    事务->:事务是恢复和并发控制的基本单位 ->事务具有四个特性:原子性.隔离性.一致性.持久性.这四个特性通常称为ACID Begin transaction/tran   --开始事务 ...

  7. iOS项目之解析HTML数据

    最近因为需求,一直在做HTML数据的解析,从网页中去获取需要的数据,然后展示到自己的app中. 在网上找了很多资料,大多都是TFHpple这个第三方框架,能够根据标签节点获取对应的数据,但是现在我需要 ...

  8. Cause: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException:

    ### Error updating database. Cause: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: You h ...

  9. MyBatis框架入门之(二)

    在本篇文章中,没有对细节进行处理的很好,有很多晓得细节的遗漏,本文只是一个简单的快速的入门 MyBatis的快速入门 导入MyBatis框架jar包 配置文件 SqlSessionFactoryBui ...

  10. Linux - TCP编程相关配置1

    100万并发连接服务器笔记之1M并发连接目标达成 第四个遇到的问题:tcp_mem 在服务端,连接达到一定数量,诸如50W时,有些隐藏很深的问题,就不断的抛出来. 通过查看dmesg命令查看,发现大量 ...