相关链接

优点:

  可以统一处理所有页面的异常,对所有需要返回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. redis常见应用场景

    redis应用场景总结redis平时我们用到的地方蛮多的,下面就了解的应用场景做个总结: 1.热点数据的缓存 由于redis访问速度块.支持的数据类型比较丰富,所以redis很适合用来存储热点数据,另 ...

  2. 【转】Tomcat 快速入门

    本文转载自:https://www.cnblogs.com/jingmoxukong/p/8258837.html?utm_source=gold_browser_extension 目录 Tomca ...

  3. java设计模式之动态代理的概述和实现

    概述 1.代理:本来应该自己做的事情,请了别人来做,被请的人就是代理对象. 举例:春节回家买票让人代买 2.在Java中java.lang.reflect包下提供了一个Proxy类和一个Invocat ...

  4. Charles 从入门到精通 --转

    文章目录 1. 目录及更新说明 2. Charles 限时优惠 3. 简介 4. 安装 Charles 5. 将 Charles 设置成系统代理 6. Charles 主界面介绍 7. 过滤网络请求 ...

  5. mysql复习之一

    DROP DATABASE mysql_shiyan;. cd /home/shiyanlou/Desktop git clone https://github.com/shiyanlou/SQL4 ...

  6. Fiddler(三)Fiddler设置手机抓包

    一.前提 我们要实现手机抓包,必须要手机连接的wifi和PC段连接的wifi所处同一个局域网内,如果你使用的是笔记本,那么这个就好办了,如果你使用的是台式机,那么你还需要准备一个无线网卡.我使用的是F ...

  7. redis 配置详解

    # redis 配置文件示例 # 当你需要为某个配置项指定内存大小的时候,必须要带上单位, # 通常的格式就是 1k 5gb 4m 等酱紫: # # 1k => 1000 bytes # 1kb ...

  8. 纯手写SpringMVC到SpringBoot框架项目实战

    引言 Spring Boot其设计目的是用来简化新Spring应用的初始搭建以及开发过程.该框架使用了特定的方式来进行配置,从而使开发人员不再需要定义样板化的配置. 通过这种方式,springboot ...

  9. k8s API sample

    Declarative API k8s: cluster-api Introduction to Kubernetes Cluster-API Project Declarative Manageme ...

  10. DDos攻击的常见方法及防御方法

    什么是DDoS? DDoS是英文Distributed Denial of Service的缩写,意即“分布式拒绝服务”,那么什么又是拒绝服务(Denial of Service)呢?可以这么理解,凡 ...