`
jinyanhui2008
  • 浏览: 319564 次
  • 性别: Icon_minigender_1
  • 来自: 青岛
社区版块
存档分类
最新评论

spring 异常统一处理类

阅读更多

今天睡了一觉,起来突然想上来写点关于spring的东西,说动手就动手,买上开始写,首先声明,这个是用在spring2.0上的,不过估计1.2也能用,因为配置文件方面我还是用的spring1.0的配置方法,aop的那种配置方式还没找到怎么写。

代码是从我的项目中直接拷贝出来的,想要用自己改一下就行了。

不说了先上配置文件代码

<bean id="exceptionHandler" class="com.MobileRDA.ExceptionAdvisor"></bean><!--异常处理类声明-->
<bean id="BeanNameAutoProxyCreator" class="org.springframework.aop.framework.autoproxy.BeanNameAutoProxyCreator"><!--就是通过它来配置我们的spring异常处理-->
   <property name="beanNames">
    <list>
<!--
springBean的命名以Service结尾的都走这个异常处理类
如这个 我的beanID就是用UserLoginService 这个命名规则就符合了我的beanNames的命名规则。
<bean id="UserLoginService" class="com.MobileRDA.services.impl.UserLoginServiceImpl">
   <property name="xtm08DAO" ref="Xtm08DAO"></property>
   <property name="xtm081DAO" ref="Xtm081DAO"></property>
</bean>
--> 
     <value>*Service</value> 
</list>
   </property>
   <property name="interceptorNames">
    <value>exceptionHandler</value><!--异常执行的bean,与上面声明的bean对应-->
   </property>
</bean>

 

下面贴上我的处理bean的源码

package com.MobileRDA;

import org.springframework.aop.ThrowsAdvice;
import org.springframework.dao.DataAccessException;

import java.io.IOException;
import java.lang.reflect.Method;
import java.sql.SQLException;

public class ExceptionAdvisor implements ThrowsAdvice {
    public void afterThrowing(Method method, Object[] args, Object target, Exception ex) throws Throwable {
//在后台中输出错误异常异常信息,可以通过log4j输出,自己修改即可。
        System.out.println("*************************************");
        System.out.println("Error happened in class: " + target.getClass().getName());
        System.out.println("Error happened in method: " + method.getName());
        for (int i = 0; i < args.length; i++) {
            System.out.println("arg[" + i + "]: " + args[i]);
        }
        System.out.println("Exception class: " + ex.getClass().getName());
        System.out.println("ex.getMessage():"+ex.getMessage());
        ex.printStackTrace();
        System.out.println("*************************************");
   //在这里判断异常,根据不同的异常返回错误。
   if(ex.getClass().equals(DataAccessException.class)){
    ex.printStackTrace();
    throw new BusinessException("数据库操作失败!");
   }else if(ex.getClass().toString().equals(NullPointerException.class.toString())) {
    ex.printStackTrace();
    throw new BusinessException("调用了未经初始化的对象或者是不存在的对象!");
   }else if(ex.getClass().equals(IOException.class)) {
    ex.printStackTrace();
    throw new BusinessException("IO异常!");
   }else if(ex.getClass().equals(ClassNotFoundException.class)) {
    ex.printStackTrace();
    throw new BusinessException("指定的类不存在!");
   }else if(ex.getClass().equals(ArithmeticException.class)) {
    ex.printStackTrace();
    throw new BusinessException("数学运算异常!");
   }else if(ex.getClass().equals(ArrayIndexOutOfBoundsException.class)) {
    ex.printStackTrace();
    throw new BusinessException("数组下标越界!");
   }else if(ex.getClass().equals(IllegalArgumentException.class)) {
    ex.printStackTrace();
    throw new BusinessException("方法的参数错误!");
   }else if(ex.getClass().equals(ClassCastException.class)) {
    ex.printStackTrace();
    throw new BusinessException("类型强制转换错误!");
   }else if(ex.getClass().equals(SecurityException .class)) {
    ex.printStackTrace();
    throw new BusinessException("违背安全原则异常!");
   }else if(ex.getClass().equals(SQLException.class)) {
    ex.printStackTrace();
    throw new BusinessException("操作数据库异常!");
   }else if(ex.getClass().equals(NoSuchMethodError.class)) {
    ex.printStackTrace();
    throw new BusinessException("方法末找到异常!");
   }else if(ex.getClass().equals(InternalError.class)) {
    ex.printStackTrace();
    throw new BusinessException("Java虚拟机发生了内部错误");
   }else{
    ex.printStackTrace();
    throw new BusinessException("程序内部错误,操作失败!"+ex.getMessage());
   }
    }
}

 


通过上面的处理就能按照我们的需要输出所有的异常信息了。

下面是BusinessException的源码

package com.MobileRDA;

public class BusinessException extends RuntimeException {
private static final long serialVersionUID = 3152616724785436891L;

    public BusinessException(String frdMessage) {
        super(createFriendlyErrMsg(frdMessage));
    }

    public BusinessException(Throwable throwable) {
        super(throwable);
    }
    public BusinessException(Throwable throwable, String frdMessage) {
        super(throwable);
    }

    private static String createFriendlyErrMsg(String msgBody){
   String prefixStr = "抱歉,";
   String suffixStr = " 请稍后再试或与管理员联系!";

   StringBuffer friendlyErrMsg = new StringBuffer("");

   friendlyErrMsg.append(prefixStr);

   friendlyErrMsg.append(msgBody);

   friendlyErrMsg.append(suffixStr);

   return friendlyErrMsg.toString();
}
}

 

 

很简单,基本上都能看懂应该,就不多说了。

分享到:
评论
2 楼 雪山狮子 2012-03-22  
请问一下,在业务层应该抛出异常么
1 楼 forgetlast 2010-08-06  
哇。找了一天了。很棒。。!!

相关推荐

    spring 异常统一处理类.doc

    spring 异常统一处理类.doc ok

    使用Spring AOP对异常进行统一处理

    我们在捕获到异常并对异常进行处理时可能会遇到如下一些问题: 1.不确定应如何处理这些异常 2.需要记录异常日志时没有记录,或者异常在不同的地方重复记录,使得排错调试不方便 ...无法对某些异常进行统一处理和修改。

    Spring Boot统一异常处理类

    Spring Boot统一异常处理类,BaseResponse类就两个字段code和message。经测试,可以捕获所以异常,并返回指定json数据

    详解SpringCloud Finchley Gateway 统一异常处理

    SpringCloud Finchley Gateway 统一异常处理是指在使用 SpringCloud Finchley 版本的 Gateway 时,如何统一处理系统级异常的方法。默认情况下,SpringCloud Gateway 会返回 HTML 格式的错误页面,而不是我们期望的 ...

    spring mvc统一处理异常

    spring mvc统一处理异常,通过@ControllerAdvice+@ExceptionHandler

    Spring Cloud Gateway的全局异常处理

    以下是一个示例代码片段,展示了如何创建一个自定义的异常处理类`JsonExceptionHandler`: ```java package com.cxytiandi.gateway.exception; import java.util.HashMap; import java.util.Map; import org....

    java全局异常统一处理

    在Java中,全局异常统一处理是一种常见的错误处理模式,它允许在一个单独的地方集中处理应用程序中抛出的所有异常。这种处理方式有助于简化代码,提高代码的可读性和可维护性。 要实现全局异常统一处理,Java提供了...

    Java异常介绍及Spring Boot统一异常处理

    Spring Boot 提供了统一的异常处理机制,通过使用 @ControllerAdvice 和 @ExceptionHandler 注解,可以实现对控制器层、Service 层、Dao 层以及 Spring 系统内定义的部分异常的统一处理。 在 Spring Boot 中,可以...

    spingmvc+mybatis+统一异常处理机制

    搭建部分大致跟网上其他资料差不多,唯一不同的加入了统一错误处理,为了方便开发人员开发,所有错误码用一张表存在数据库中,然后由应用将整表缓存,缓存采用的spring自带的cache,开发中所有错误包括系统异常在...

    springmvc 异常统一处理的三种方式详解.docx

    在Spring MVC框架中,异常处理是一项关键任务,它确保了应用程序在遇到错误或异常时能够以优雅的方式响应,提供统一的错误信息,并保持代码的整洁和模块化。本篇文章将详细探讨Spring MVC处理异常的三种主要方法:...

    后端异常统一处理解决方案

    这篇博客“后端异常统一处理解决方案”主要探讨了如何在Spring Boot、SSM(Spring、Spring MVC、MyBatis)框架中有效地管理和处理异常,提供了一种优化的方法来提升应用程序的健壮性。 首先,Spring Boot以其简洁的...

    spring mvc异常处理

    Spring MVC 提供了一种统一的方式来处理应用程序中抛出的异常。它通过`@ExceptionHandler`注解、`@ControllerAdvice`注解和`HandlerExceptionResolver`接口来实现这一目标,使得我们可以定制化错误页面,提供友好的...

    springboot 多模块 集成mybatis redis 日志 异常统一处理,切面拦截器

    springboot多模块项目,集成了mybatis,连接池,redis,日志,sql日志打印,异常统一处理,统一返回格式,mapper文件自动生成,generator xml ,切面日志和拦截器,sql注入过滤,解压即可部署打包启动,包含数据库...

    三. spring mvc 异常统一处理

    NULL 博文链接:https://gaojiewyh.iteye.com/blog/1297746

    spring mvc异常简单处理

    通过这种方式,我们可以为整个应用程序提供统一的异常处理策略,而无需在每个控制器中重复代码。 此外,Spring MVC还支持使用`HandlerExceptionResolver`接口来自定义异常解析器。实现这个接口并将其注册到Spring的...

    Spring Cloud Gateway全局异常处理的方法详解

    Spring Cloud Gateway全局异常处理的方法详解 Spring Cloud Gateway作为Spring Cloud生态系中的网关,旨在为微服务架构提供一种简单而有效的统一的API路由管理方式。然而,在实际应用中,Spring Cloud Gateway中的...

    Spring数据库访问之异常处理

    本篇文章将深入探讨Spring中的数据库异常处理机制,帮助开发者更好地理解和处理在数据库操作中可能遇到的问题。 首先,Spring Data Access层的核心组件是JdbcTemplate和HibernateTemplate(或其升级版JPA的...

    Spring Cloud zuul自定义统一异常处理实现方法

    Spring Cloud zuul自定义统一异常处理实现方法 Spring Cloud zuul自定义统一异常处理实现方法是指在Spring Cloud微服务体系中,使用zuul提供filer和router功能时,实现自定义统一异常处理的方法。在zuul中,默认的...

    springboot整合thymeleaf+maven实现异常处理页面

    - 创建一个实现了 `ExceptionHandlerExceptionResolver` 接口的类,或者继承 `AbstractHandlerExceptionResolver`,并在其中覆盖 `resolveException` 方法来处理异常。 - 注册这个类为 Spring 的 Bean,这样 ...

    Spring Boot统一异常处理最佳实践(拓展篇)

    Spring Boot 统一异常处理最佳实践拓展篇 在 Spring Boot 中,统一异常处理是非常重要的,今天我们将介绍 Spring Boot 统一异常处理最佳实践的拓展篇。之前我们已经了解了基本的统一异常处理思路,现在我们将继续...

Global site tag (gtag.js) - Google Analytics