今天睡了一觉,起来突然想上来写点关于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();
}
}
很简单,基本上都能看懂应该,就不多说了。
分享到:
相关推荐
spring 异常统一处理类.doc ok
我们在捕获到异常并对异常进行处理时可能会遇到如下一些问题: 1.不确定应如何处理这些异常 2.需要记录异常日志时没有记录,或者异常在不同的地方重复记录,使得排错调试不方便 ...无法对某些异常进行统一处理和修改。
Spring Boot统一异常处理类,BaseResponse类就两个字段code和message。经测试,可以捕获所以异常,并返回指定json数据
SpringCloud Finchley Gateway 统一异常处理是指在使用 SpringCloud Finchley 版本的 Gateway 时,如何统一处理系统级异常的方法。默认情况下,SpringCloud Gateway 会返回 HTML 格式的错误页面,而不是我们期望的 ...
spring mvc统一处理异常,通过@ControllerAdvice+@ExceptionHandler
以下是一个示例代码片段,展示了如何创建一个自定义的异常处理类`JsonExceptionHandler`: ```java package com.cxytiandi.gateway.exception; import java.util.HashMap; import java.util.Map; import org....
在Java中,全局异常统一处理是一种常见的错误处理模式,它允许在一个单独的地方集中处理应用程序中抛出的所有异常。这种处理方式有助于简化代码,提高代码的可读性和可维护性。 要实现全局异常统一处理,Java提供了...
Spring Boot 提供了统一的异常处理机制,通过使用 @ControllerAdvice 和 @ExceptionHandler 注解,可以实现对控制器层、Service 层、Dao 层以及 Spring 系统内定义的部分异常的统一处理。 在 Spring Boot 中,可以...
搭建部分大致跟网上其他资料差不多,唯一不同的加入了统一错误处理,为了方便开发人员开发,所有错误码用一张表存在数据库中,然后由应用将整表缓存,缓存采用的spring自带的cache,开发中所有错误包括系统异常在...
在Spring MVC框架中,异常处理是一项关键任务,它确保了应用程序在遇到错误或异常时能够以优雅的方式响应,提供统一的错误信息,并保持代码的整洁和模块化。本篇文章将详细探讨Spring MVC处理异常的三种主要方法:...
这篇博客“后端异常统一处理解决方案”主要探讨了如何在Spring Boot、SSM(Spring、Spring MVC、MyBatis)框架中有效地管理和处理异常,提供了一种优化的方法来提升应用程序的健壮性。 首先,Spring Boot以其简洁的...
Spring MVC 提供了一种统一的方式来处理应用程序中抛出的异常。它通过`@ExceptionHandler`注解、`@ControllerAdvice`注解和`HandlerExceptionResolver`接口来实现这一目标,使得我们可以定制化错误页面,提供友好的...
springboot多模块项目,集成了mybatis,连接池,redis,日志,sql日志打印,异常统一处理,统一返回格式,mapper文件自动生成,generator xml ,切面日志和拦截器,sql注入过滤,解压即可部署打包启动,包含数据库...
NULL 博文链接:https://gaojiewyh.iteye.com/blog/1297746
通过这种方式,我们可以为整个应用程序提供统一的异常处理策略,而无需在每个控制器中重复代码。 此外,Spring MVC还支持使用`HandlerExceptionResolver`接口来自定义异常解析器。实现这个接口并将其注册到Spring的...
Spring Cloud Gateway全局异常处理的方法详解 Spring Cloud Gateway作为Spring Cloud生态系中的网关,旨在为微服务架构提供一种简单而有效的统一的API路由管理方式。然而,在实际应用中,Spring Cloud Gateway中的...
本篇文章将深入探讨Spring中的数据库异常处理机制,帮助开发者更好地理解和处理在数据库操作中可能遇到的问题。 首先,Spring Data Access层的核心组件是JdbcTemplate和HibernateTemplate(或其升级版JPA的...
Spring Cloud zuul自定义统一异常处理实现方法 Spring Cloud zuul自定义统一异常处理实现方法是指在Spring Cloud微服务体系中,使用zuul提供filer和router功能时,实现自定义统一异常处理的方法。在zuul中,默认的...
- 创建一个实现了 `ExceptionHandlerExceptionResolver` 接口的类,或者继承 `AbstractHandlerExceptionResolver`,并在其中覆盖 `resolveException` 方法来处理异常。 - 注册这个类为 Spring 的 Bean,这样 ...
Spring Boot 统一异常处理最佳实践拓展篇 在 Spring Boot 中,统一异常处理是非常重要的,今天我们将介绍 Spring Boot 统一异常处理最佳实践的拓展篇。之前我们已经了解了基本的统一异常处理思路,现在我们将继续...