程序中对异常情况的处理

目前开发的一个项目

开发一个新功能,总是感觉很吃力,

因为总是要处理各种协作方接口异常情况:

(a)502 服务器没有启动

(b)403 拒绝访问

(c)404 接口路径不对

(d)500 服务器内部错误

 

如果把这些错误信息一层层往上返回,会非常麻烦

在业务逻辑中参杂了这些与业务一点关系都没有的代码,看起来很累赘.

看下面的代码:


 

 

 

错误是一步步往上传递,每一个方法里面都在处理,感觉好累

最下面的代码片段是控制器里面的,

在其他控制器里面也会看到类似的代码

其实可以统一处理的

这些异常应该在一个地方统一捕获,统一处理.

而不是东处理一个,西处理一个,看起来很乱,容易造成冗余和重复,很难维护.

下面我就漏改了:


 

 

 

如何实现异常统一处理呢?

第一,遇到异常直接抛出,而不是马上处理;

第二,一个异常handler进行统一处理

handler 类:

Java代码  

  1. package com.chanjet.gov.handler;  
  2.   
  3. import com.chanjet.gov.bean.exception.MustBeDealedException;  
  4. import com.chanjet.gov.util.Constant;  
  5. import org.springframework.web.bind.annotation.ControllerAdvice;  
  6. import org.springframework.web.bind.annotation.ExceptionHandler;  
  7. import org.springframework.web.context.request.RequestContextHolder;  
  8. import org.springframework.web.context.request.ServletRequestAttributes;  
  9.   
  10. import javax.servlet.http.HttpServletResponse;  
  11. import java.io.IOException;  
  12.   
  13. /** 
  14.  * Created by whuanghkl on 3/30/16. 
  15.  */  
  16. //注意使用注解@ControllerAdvice作用域是全局Controller范围  
  17. //可应用到所有@RequestMapping类或方法上的@ExceptionHandler、@InitBinder、@ModelAttribute,在这里是@ExceptionHandler  
  18. @ControllerAdvice  
  19. public class ExceptionHandlerAdvice {  
  20.     @ExceptionHandler(MustBeDealedException.class)  
  21. //    @RESPONSE_CONTENTTYPE_JSON_UTFStatus(HttpStatus.BAD_REQUEST)  
  22. //    @ResponseBody  
  23.     public String handleIOException(MustBeDealedException ex) {  
  24. //        return ClassUtils.getShortName(ex.getClass()) + ex.getMessage();  
  25.          
  26.         System.out.println(ex);  
  27.         HttpServletResponse response = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getResponse();  
  28.         String responseStatusCode = ex.getResponseStatusCode();  
  29.         if (null == responseStatusCode) {  
  30.             responseStatusCode = Constant.EMPTY;  
  31.         }  
  32.         try {  
  33.             response.sendRedirect("/error.html?error=" + ex.getErrorCode() + "&responseStatusCode=" + responseStatusCode);  
  34.         } catch (IOException e) {  
  35.             e.printStackTrace();  
  36.         }  
  37.         return null;  
  38.     }  
  39. }  

 

参考:http://www.cnblogs.com/xguo/p/3163519.html

 

时间: 2024-08-01 20:44:57

程序中对异常情况的处理的相关文章

Silverlight实用窍门系列:45.Silverlight下使用WinDbg调试应用程序和查看异常情况

在本节中我们将讲述如何通过WinDbg工具对Silverlight应用程序进行调试,我们可以判断其无效过期的引用或者事件,将其释放掉,以达到及时释放内存的作用. 首先我们需要下载WinDbg工具,在http://msdl.microsoft.com/download/symbols/debuggers/dbg_x86_6.11.1.402.msi即可下载32位的WinDbg工具.并且安装好这个工具. 然后我们准备一个最简单的Silverlight应用程序,其Xaml代码如下: <UserCont

ERP实施中的异常情况之控制供应商交货期

做过ERP实施的顾问或者用过ERP软件的人都知道,若企业的没个动作都按规矩来,没什么意外的情况,那么,ERP实施项目是非常简单的事情.但是,事与愿违,在ERP实施过程中,往往会出现一些不如人意的事情. 笔者会对此,收集了一些比较共性的问题,拿出来供大家研究. 供应商交货时间比应交货时间早,那不是更好,有必要进行控制吗?其实不然,过早也有过早的坏处. 1.可能会影响付款周期. 如企业跟供应商确定的付款期为交货后下月25号付款.则当9月29日交货时,付款日期为10月25日;9月30日交货时,付款日期

电脑文件无法删除 显示在另外程序中打开的解决办法

  删除文件时出现文件已在另外程序中打开怎么办? 1.删除文件时出现文件已在另外程序中打开的情况下,文件无法被删除,或者进行其他操作,下面就来告诉你该怎么办? 2.当文件无法被整体一次删除时,打开文件夹,先选择所有文件点击删除. 3.右击删除后当然不可能将所有的文件全部删除掉,会跳出类似下图的选项框. 4.这时候打开任务管理器,点击进程寻找已经被打开的文件.右击点击结束进程. 5.这时候我们在回来删除,演示文件夹.成功删除

如何处理Windows Forms程序中未处理的异常

如果Windows Forms程序中有未被捕获的异常,会导致程序崩溃并且给用户造成不良的印象.例如下面的程序,模拟了一个未捕获的异常: 按钮事件为: private void button1_Click(object sender, EventArgs e) { throw new Exception(); } 点击Exception 按钮,会弹出如下默认窗口 Windows Forms提供了两个事件来处理未捕获的异常发生时的情况,分别是 Application.ThreadException和

winform-C# Winform项目,如何判断外部视频客户端程序是否出现客户端程序异常情况

问题描述 C# Winform项目,如何判断外部视频客户端程序是否出现客户端程序异常情况 在C# Winform项目,有个form1窗体,在form1窗体有一个button按钮. 目前已经可以在button的点击事件中,通过以下代码实现将"CBOX央视影音"在线视频播放的App客户端打开. 代码如下: Process proc = new Process(); proc.StartInfo.FileName = @"C:Program FilesCNTVCBoxCBox.ex

捕捉WPF应用程序中XAML代码解析异常

由于WPF应用程序中XAML代码在很多时候是运行时加载处理的.比如DynamicResource,但是在编译或者运行的过程中,编写的XAML代码很可能有错误,此时XAML代码解析器通常会抛出称为XamlParseException的异常.但是抛出的XamlParseException异常提供的信息非常简单,或者是很不准确.此时我们关于通过对变通的方法来获取更多的异常信息: 我们知道,WPF应用程序中的XAML代码是在InitializeComponent方法中解析的.而这个方法通常位于窗口对象的

确定在 z/OS 上的WAS中运行的应用程序的 CPU 使用情况

确定在 z/OS 上的 WebSphere Application Server 中运行的应用程序的 CPU 使用情况 简介 IBM WebSphere Application Server 环境常常托管着多个不同类型的企业应用程序,它们受不同的 Java EE 技术支持.这些应用程序通常会并发运行,每个都会消耗与它们执行的工作相对应的系统资源,比如 CPU 周期和内存.在性能测试和生产使用期间,查看每个应用程序(而不是仅查看整个应用服务器)消耗的资源常常很有用. 有许多工具可用于监视 WebS

线程同步中异常情况的处理

 本文主要用来说明多线程中异常情况的处理.       问题出现:使用Lock进行多线程中的同步的时候,如果在Lock块里面出现了异常,那么同步的资源(变量)就没有办法被释放,最终将导致线程死锁. 1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Text; 5 using System.Threading; 6 7 namespace testLockList 8 {

android-在程序中录制声音在真机上出现异常

问题描述 在程序中录制声音在真机上出现异常 我想在程序中录制声音,在一些设备中可以正常的运行,但是在 Samsung Galaxy 中却出现以下的异常: android.content.ActivityNotFoundException: No Activity found to handle Intent { act=android.provider.MediaStore.RECORD_SOUND } 我使用的下面的代码: Intent intent = new Intent(MediaSto