目前开发的一个项目
开发一个新功能,总是感觉很吃力,
因为总是要处理各种协作方接口异常情况:
(a)502 服务器没有启动
(b)403 拒绝访问
(c)404 接口路径不对
(d)500 服务器内部错误
如果把这些错误信息一层层往上返回,会非常麻烦
在业务逻辑中参杂了这些与业务一点关系都没有的代码,看起来很累赘.
看下面的代码:
错误是一步步往上传递,每一个方法里面都在处理,感觉好累
最下面的代码片段是控制器里面的,
在其他控制器里面也会看到类似的代码
其实可以统一处理的
这些异常应该在一个地方统一捕获,统一处理.
而不是东处理一个,西处理一个,看起来很乱,容易造成冗余和重复,很难维护.
下面我就漏改了:
如何实现异常统一处理呢?
第一,遇到异常直接抛出,而不是马上处理;
第二,一个异常handler进行统一处理
handler 类:
package com.chanjet.gov.handler; import com.chanjet.gov.bean.exception.MustBeDealedException; import com.chanjet.gov.util.Constant; import org.springframework.web.bind.annotation.ControllerAdvice; import org.springframework.web.bind.annotation.ExceptionHandler; import org.springframework.web.context.request.RequestContextHolder; import org.springframework.web.context.request.ServletRequestAttributes; import javax.servlet.http.HttpServletResponse; import java.io.IOException; /** * Created by whuanghkl on 3/30/16. */ //注意使用注解@ControllerAdvice作用域是全局Controller范围 //可应用到所有@RequestMapping类或方法上的@ExceptionHandler、@InitBinder、@ModelAttribute,在这里是@ExceptionHandler @ControllerAdvice public class ExceptionHandlerAdvice { @ExceptionHandler(MustBeDealedException.class) // @RESPONSE_CONTENTTYPE_JSON_UTFStatus(HttpStatus.BAD_REQUEST) // @ResponseBody public String handleIOException(MustBeDealedException ex) { // return ClassUtils.getShortName(ex.getClass()) + ex.getMessage(); System.out.println(ex); HttpServletResponse response = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getResponse(); String responseStatusCode = ex.getResponseStatusCode(); if (null == responseStatusCode) { responseStatusCode = Constant.EMPTY; } try { response.sendRedirect("/error.html?error=" + ex.getErrorCode() + "&responseStatusCode=" + responseStatusCode); } catch (IOException e) { e.printStackTrace(); } return null; } }
参考:http://www.cnblogs.com/xguo/p/3163519.html
相关推荐
异常处理是每个应用程序都会用到的,纵然在程序编写期间我们都会最大限度的考虑可能发生的异常并进行相应的处理,但是往往并不能完全考虑周全,百密一疏,出现未处理异常而导致程序出错,数据丢失,如用户输入错误...
4. **异常处理中的finally块**: - 虽然本例中没有体现,但在实际开发中经常使用`finally`块来确保无论是否发生异常,某些清理工作都能被执行(例如关闭文件资源等)。 5. **自定义异常**: - 当标准异常类...
程序异常处理是软件开发中的一个核心概念,它关乎程序的健壮性和稳定性。在编程过程中,我们无法保证每一个环节都能按预期执行,因此,当程序遇到错误或异常情况时,有效的异常处理机制能够帮助我们捕获问题,防止...
在易语言中,程序异常处理是一项重要的功能,它能够帮助开发者有效地管理程序运行时可能出现的错误,确保程序的稳定性和可靠性。这个"易语言程序异常处理源码.rar"压缩包显然包含了与异常处理相关的源代码示例和使用...
异常处理是编程中的一种机制,用于捕获和处理运行时发生的错误或异常情况。异常可以由硬件引发,如硬件异常,也可以由操作系统或应用程序自身触发,即软件异常。当异常发生时,操作系统允许程序有机会检查异常类型并...
总的来说,Delphi异常处理机制提供了一种灵活且强大的方式来处理程序中的错误和异常情况。通过合理使用try…except…end语句块,on…do语句,以及异常实例的使用,开发者可以有效地控制程序的健壮性和稳定性,确保...
在编程世界中,异常处理是一项至关重要的技能,无论是Java、C语言、C++还是C#,甚至是用于服务器...通过理解和熟练运用各种语言的异常处理机制,我们可以更好地应对程序运行中的错误情况,提高软件的可靠性和用户体验。
异常处理是Java编程中的关键组成部分,它允许程序员优雅地处理程序执行过程中可能出现的错误或不正常情况。通过异常处理,程序可以在遇到问题时中断当前流程,执行预定义的恢复操作,或者至少提供有用的错误信息,而...
在CAD(计算机辅助设计)领域,"应用程序的组件中发生了未处理的异常"是一个常见的错误提示,这通常意味着在运行CAD软件时,遇到了一个程序无法正常处理的问题,导致了系统崩溃或者异常中断。这种情况可能由多种因素...
本主题将深入探讨“程序中的异常处理”,帮助你理解和掌握如何有效地管理这些异常,确保程序即使在出现问题时也能保持稳定运行。 异常处理的目标是让程序在遇到错误时不会突然崩溃,而是能够优雅地捕获并处理异常,...
易语言程序异常处理源码,程序异常处理,异常处理子程序,信息框_,SetUnhandledExceptionFilter,EXCEPTION_RECORD,CONTEXT,EXCEPTION_POINTERS
Java面向对象程序设计实验四 异常处理 Java面向对象程序设计实验四的主要目的是掌握异常处理的技术,了解自定义异常类与异常跟踪栈的概念。在这个实验中,我们将学习如何捕获并处理异常,并通过编写程序来验证...
在 Java 程序设计中,异常处理是非常重要的一部分。异常是指程序在执行过程中出现的错误或异常情况,例如文件不存在、网络连接中断、操作数超出预定范围等。在 Java 中,异常本身作为一个对象,产生异常就是产生一个...
在IT领域,特别是软件开发过程中,异常处理是确保程序健壮性和用户友好...对于复杂的系统而言,构建一套全面且细致的异常处理策略至关重要,这包括对各种可能的异常情况进行充分考虑,并为每种异常提供恰当的处理逻辑。
在易语言中,线程是并发执行的程序单位,线程结构异常处理是编程过程中非常重要的一环,因为线程可能会遇到各种异常情况,如内存访问错误、除零异常等。 线程结构异常处理源码是易语言中处理这些异常的关键部分。当...
通过对实验的参与,学生不仅能够深化对C++模板的理解,还能学习到如何有效地处理程序中的异常情况,提高代码的健壮性和可维护性。此外,实验还强调了预习、调试、记录和代码提交等良好的编程实践,有助于培养学生的...
在C#编程中,异常处理是一项至关重要的技术,它允许开发者在程序运行时优雅地处理错误情况,防止程序因未预期的问题而崩溃。本节将深入探讨C#中的异常处理概念,包括如何捕获和处理异常,以及C#特有的异常类、抛出和...
4. **JMP指令**:在异常处理中,`JMP`指令常用于跳转到异常处理程序。当异常发生时,控制流会通过`JMP`指令转移到预设的异常处理代码段。 5. **CallWindowProcA**:这是一个Windows API函数,用于调用窗口过程。在...
在编程过程中,遇到程序运行时突然异常的情况是十分常见的,特别是当出现“内存地址无法访问”的错误时,问题显得尤为棘手。这类问题通常在程序运行一段时间后出现,可能由于多用户并发、网络不稳定或其他不可预知的...