相关链接

优点:

  可以统一处理所有页面的异常,对所有需要返回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. Linux 中常用的命令

    Linux中的常用命令: 终端快捷键: Ctrl + a/Home 切换到命令行开始 Ctrl + e/End 切换到命令行末尾 Ctrl + l 清除屏幕内容,效果等同于clear Ctrl + u ...

  2. CSR8670的A2DP与AVRCP的应用笔记

    1. A2DP1.1. 基本概念阅读A2DP SPEC V12的1.1章,可知: Advanced Audio Distribution Profile(A2DP)典型应用是立体声音乐播放器的音乐到耳 ...

  3. postgresql查询语句

    //查询表名称SELECT tablename FROM pg_tablesWHERE tablename NOT LIKE 'pg%'AND tablename NOT LIKE 'sql_%' O ...

  4. Python+OpenCV图像处理(七)—— 滤波与模糊操作

    过滤是信号和图像处理中基本的任务.其目的是根据应用环境的不同,选择性的提取图像中某些认为是重要的信息.过滤可以移除图像中的噪音.提取感兴趣的可视特征.允许图像重采样等等.频域分析将图像分成从低频到高频 ...

  5. The Little Prince-12/06

    The Little Prince-12/06 “That doesn't matter. Draw me a sheep.” When the prince ask the planet to dr ...

  6. SSM思路大总结(部门信息的显示和增删改查)

    #ssm整合(部门管理) ##1.新建工程 1.新建maven工程 2.添加web.xml 3.添加tomcat运行环境 4.添加依赖jar包 spring-webmvc mysql commonse ...

  7. PyCharm‘s Project Deployment

    当在本地写完项目,部署到服务器上调试的时候,难免会碰到代码的修修改改,但由于项目在服务器上,修改起来相对麻烦.各路大神或许有自己的方法去解决.这篇博客演示利用PyCharm的Deployment功能, ...

  8. java Condition条件变量的通俗易懂解释、基本使用及注意点

    最近在看pthread方面的书,看到条件变量一节的时候,回忆了下java中条件变量的使用方式. java中条件变量都实现了java.util.concurrent.locks.Condition接口, ...

  9. libvirt的security

    1. libvirt支持SASL authentication and encryption MD5 hashes are considered unsafe and should not be us ...

  10. win7安装mysql-8.0.13-winx64

    这里展示一下,由于需要安装一个版本测试一下数据,其实就是超简单的啦. 下包 注:https://dev.mysql.com/downloads/mysql/ 解压与配置 [mysqld] basedi ...