程序中对异常情况的处理

简介:

目前开发的一个项目

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

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

(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

 

相关文章
|
2月前
|
监控 数据库连接 UED
利用异常处理机制提升程序健壮性与稳定性的策略
【10月更文挑战第13天】利用异常处理机制提升程序健壮性与稳定性的策略
136 58
|
2月前
|
存储 安全 Java
如何避免`ArrayStoreException`异常?
`ArrayStoreException`是在Java中尝试将错误类型的对象存储到泛型数组时抛出的异常。要避免此异常,需确保向数组添加的对象类型与数组声明的类型一致,使用泛型和类型检查,以及在运行时进行类型安全的转换和验证。
41 6
|
4月前
|
PHP 开发者 UED
PHP编程中的错误处理与异常管理
【8月更文挑战第27天】在PHP编程的世界中,错误和异常是开发者常遇到的两大挑战。本文旨在通过浅显易懂的方式,引导读者理解如何在PHP代码中妥善处理错误和异常。我们将从基础的错误处理讲起,逐步深入到异常管理的高级技巧,确保你的代码在遇到问题时能够优雅地处理,而不是崩溃。文章将用实例说明如何捕获、记录和处理这些事件,以保障应用的稳定性和用户体验。
|
4月前
|
安全 测试技术 数据库连接
如何避免 C# 中的异常
【8月更文挑战第27天】
57 2
|
4月前
|
Cloud Native 数据处理
项目环境测试问题之当异步任务在运行过程中抛出非预期的异常会导致后果如何解决
项目环境测试问题之当异步任务在运行过程中抛出非预期的异常会导致后果如何解决
|
7月前
|
前端开发 程序员
项目中异常是如何处理的
项目中设定了全局异常处理器,统一处理预期和运行时异常。预期异常由程序员手动抛出,用于异常情况的接口返回;运行时异常为不可控错误,提供统一返回格式便于前端提示和后端排查。全局异常处理器借助@RestControllerAdvice和@ExceptionHandler注解,前者标识处理器,后者按异常类型定制前端响应,如预期异常直接返回,运行时异常则调整响应内容。
104 0
|
7月前
|
C++
C++处理的异常的机制
C++处理的异常的机制
|
监控 Java
jvm异常排查
jvm异常排查
55 0
|
数据采集 数据安全/隐私保护
如何使用异常处理机制捕获和处理请求失败的情况
在爬虫开发中,我们经常会遇到请求失败的情况,比如网络超时、连接错误、服务器拒绝等。这些情况会导致我们无法获取目标网页的内容,从而影响爬虫的效果和效率。为了解决这个问题,我们需要使用异常处理机制来捕获和处理请求失败的情况,从而提高爬虫的稳定性和稳定性。
125 0
如何使用异常处理机制捕获和处理请求失败的情况