spring的异常处理

天际星痕      2022-04-15     597

关键词:

出自于:https://blog.csdn.net/he90227/article/details/46309297   ---- 利用Spring进行统一异常处理的两种方式。

 

原文:https://blog.csdn.net/he90227/article/details/46309297?utm_source=copy

1.实现接口HandlerExceptionResolver

package com.jay.platform.exception.handler;
 
import java.io.IOException;
import java.net.ConnectException;
import java.net.SocketTimeoutException;
import java.util.Date;
 
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
 
import org.apache.log4j.Logger;
import org.springframework.web.servlet.HandlerExceptionResolver;
import org.springframework.web.servlet.ModelAndView;
 
import com.jay.platform.exception.AjaxException;
import com.jay.platform.exception.BusinessException;
 
/**
 * 
 * @ClassName: ExceptionHandler
 * @Description: 统一异常处理 , 注意这里可以处理Controller层抛出的异常,但不处理Controller捕获的异常(Controller捕获的异常,这里不再处理)
 * @author Jay He
 * @date 2014年11月4日 上午10:22:11
 * 
 */
public class ExceptionHandler implements HandlerExceptionResolver {
    private static final Logger LOGGER = Logger
	    .getLogger(ExceptionHandler.class);
 
    @Override
    public ModelAndView resolveException(HttpServletRequest request,
	    HttpServletResponse response, Object handler, Exception ex) {
	LOGGER.error(new Date().toLocaleString() + "异常信息", ex);
	if (ex instanceof NumberFormatException) {
	    return new ModelAndView("exception/number");
	} else if (ex instanceof NullPointerException) {
	    return new ModelAndView("exception/null");
	} else if (ex instanceof BusinessException) {
	    return new ModelAndView("exception/business");
	} else if (ex instanceof SocketTimeoutException
		|| ex instanceof ConnectException) {
	    try {
		response.getWriter().write("网络异常");
	    } catch (IOException e) {
		e.printStackTrace();
	    }
	    return new ModelAndView("exception/net_error");
	}else if(ex instanceof AjaxException){
	   System.out.println("-=-=");
	}
	return new ModelAndView("exception/exception");
    }
 
}

  

2.继承AbstractHandlerExceptionResolver类

package com.jay.platform.exception.handler;
 
import java.io.IOException;
import java.net.ConnectException;
import java.net.SocketTimeoutException;
import java.util.Date;
 
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
 
import org.apache.log4j.Logger;
import org.springframework.web.servlet.HandlerExceptionResolver;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.handler.AbstractHandlerExceptionResolver;
 
import com.jay.platform.exception.AjaxException;
import com.jay.platform.exception.BusinessException;
 
/**
 * 
 * @ClassName: ExceptionHandler
 * @Description: 统一异常处理 , 注意这里可以处理Controller层抛出的异常,但不处理Controller捕获的异常(Controller捕获的异常,这里不再处理)
 * @author Jay He
 * @date 2014年11月4日 上午10:22:11
 * 
 */
public class ExceptionHandler extends AbstractHandlerExceptionResolver{
    private static final Logger LOGGER = Logger
	    .getLogger(ExceptionHandler.class);
 
    @Override
    protected ModelAndView doResolveException(HttpServletRequest request,
	    HttpServletResponse response, Object handler, Exception ex) {
	<pre name="code" class="java">LOGGER.error(new Date().toLocaleString() + "异常信息", ex);
	if (ex instanceof NumberFormatException) {
	    return new ModelAndView("exception/number");
	} else if (ex instanceof NullPointerException) {
	    return new ModelAndView("exception/null");
	} else if (ex instanceof BusinessException) {
	    return new ModelAndView("exception/business");
	} else if (ex instanceof SocketTimeoutException
		|| ex instanceof ConnectException) {
	    try {
		response.getWriter().write("网络异常");
	    } catch (IOException e) {
		e.printStackTrace();
	    }
	    return new ModelAndView("exception/net_error");
	}else if(ex instanceof AjaxException){
	   System.out.println("-=-=");
	}
	return new ModelAndView("exception/exception");

在配置文件中添加自定义异常处理模块

 <!-- Spring MVC的统一异常处理 -->
    <bean id="exceptionResolver" class="com.jay.platform.exception.handler.ExceptionHandler"/>  
错误页面展示:例:
 
error.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Error页面</title>
</head>
<body>
<center>
<h1>Error页面</h1><br>
<h2>出错信息</h2>
<br><br>
错误描述
<br>
${errorTips }
<br><br>
<br><br>
错误异常信息栈
<br><br>
${ex }
</center>
</body>
</html>

  

Spring 是不是有更简单的异常处理技术?

】Spring是不是有更简单的异常处理技术?【英文标题】:IsthereasimplerexceptionhandlingtechniqueforSpring?Spring是否有更简单的异常处理技术?【发布时间】:2018-12-0303:31:51【问题描述】:我已经阅读了有关使用@ExceptionHandler的基于控制器... 查看详情

spring中的统一异常处理

在具体的SSM项目开发中,由于Controller层为处于请求处理的最顶层,再往上就是框架代码的。因此,肯定需要在Controller捕获所有异常,并且做适当处理,返回给前端一个友好的错误码。不过,Controller一多,我们发现每个Controller... 查看详情

Spring:RestController 和 Controller 的不同异常处理程序

】Spring:RestController和Controller的不同异常处理程序【英文标题】:Spring:DifferentexceptionhandlerforRestControllerandController【发布时间】:2017-09-0515:30:01【问题描述】:在Spring中,您可以通过@ControllerAdvice和@ExceptionHandler注解设置“全局”... 查看详情

spring全局异常处理

最近学习Spring时,认识到Spring异常处理的强大。之前处理工程异常,代码中最常见的就是try-catch-finally,有时一个try,多个catch,覆盖了核心业务逻辑:1try{2..........3}catch(Exception1e){4..........5}catch(Exception2e){6...........7}catch(Exception3e)... 查看详情

基于spring注解aop的异常处理

一、前言  项目刚刚开发的时候,并没有做好充足的准备。开发到一定程度的时候才会想到还有一些问题没有解决。就比如今天我要说的一个问题:异常的处理。写程序的时候一般都会通过try...catch...finally对异常进行处理,但... 查看详情

Spring GenericFilterBean 中的异常处理

】SpringGenericFilterBean中的异常处理【英文标题】:ExceptionhandlinginSpringGenericFilterBean【发布时间】:2015-10-0809:08:33【问题描述】:我已经实现了基于令牌的身份验证(没有弹簧安全性)。所以在GenericFilterBean中,它会检查并声明令... 查看详情

Spring Boot Endpoints 中的异常处理

】SpringBootEndpoints中的异常处理【英文标题】:ExceptionhandlinginSpringBootEndpoints【发布时间】:2017-09-1421:47:22【问题描述】:我正在尝试处理具有SOAP端点和Rest控制器的SpringBoot应用程序中的异常。捕获发生在REST控制器中的异常非常... 查看详情

Spring Boot 异常处理数据库错误的自定义异常?

】SpringBoot异常处理数据库错误的自定义异常?【英文标题】:SpringBootExceptionHandlingcustomExceptionsforDatabaseErrors?【发布时间】:2022-01-1218:02:12【问题描述】:我为运行时可能发生的各种错误创建了多个自定义异常。为此,我使用了@... 查看详情

spring中的统一异常处理方式

源自:https://segmentfault.com/a/1190000016236188   在具体的SSM项目开发中,由于Controller层为处于请求处理的最顶层,再往上就是框架代码的。 因此,肯定需要在Controller捕获所有异常,并且做适当处理,返回给前端一个友好的... 查看详情

如何优雅地处理 Spring Security 中未由 ControllerAdvice 处理的异常?

】如何优雅地处理SpringSecurity中未由ControllerAdvice处理的异常?【英文标题】:HowtogracefullyhandleexceptionsinSpringSecuritynothandledbyControllerAdvice?【发布时间】:2016-07-0513:15:04【问题描述】:我最近在我的Spring4/HibernateWeb应用程序中实现了... 查看详情

在 Spring 中的 @Transactional 方法期间处理异常

】在Spring中的@Transactional方法期间处理异常【英文标题】:Handlingexceptionsduringa@TransactionalmethodinSpring【发布时间】:2018-10-1312:11:48【问题描述】:我试图找出如何结合Spring的@Transactional最好地处理持久性(以及可能的其他)异常。... 查看详情

spring自带kafka消息异常处理

参考技术A方法onMessage会执行注解@KafkaListener指定的方法报异常会catch到,继续下一条消息,如果设置的是自动提交offset,则kafka认为此消息消费成功异常处理的实现类,打印日志,仅此而已 查看详情

Spring Boot 异常自定义处理 - 意外的 HTTP 状态

】SpringBoot异常自定义处理-意外的HTTP状态【英文标题】:SpringbootExceptioncustomhandling-UnexpectedHTTPstatus【发布时间】:2019-02-2502:14:41【问题描述】:我正在尝试在我的SpringBoot应用程序中实现一些自定义异常处理程序,这些处理程序... 查看详情

特定注解方法的 Spring Boot 异常处理

】特定注解方法的SpringBoot异常处理【英文标题】:Springbootexceptionhandlingforspecificannotatedmethods【发布时间】:2016-11-1003:28:06【问题描述】:我们的SpringBoot控制器具有由ajax调用的方法以及呈现CRUD模板的标准方法。我们希望能够用... 查看详情

Spring Security 认证异常处理

】SpringSecurity认证异常处理【英文标题】:Springsecurityauthenticateexceptionshandling【发布时间】:2012-09-2517:14:02【问题描述】:我有一个使用SpringSecurity3.0.x的应用程序。我有一个自定义的AuthenticationProvider:publicclassAppAuthenticationProvider... 查看详情

spring处理异常的办法

...页面传递的数据与后台javabean绑定时发生异常怎么处理org.springframework.validation.BindException参考技术A方法有如下几种:1.trycatch2.直接抛出3.包装成其他形式的异常抛出如:thrownewRuntimeException("ExceptionMessage")参考资料:还有其... 查看详情

测试期间spring webflux中的全局异常处理

】测试期间springwebflux中的全局异常处理【英文标题】:Globalexceptionhandlinginspringwebfluxduringtests【发布时间】:2020-03-2321:50:39【问题描述】:我正在使用springwebflux开发服务。我使用@ControllerAdvice实现了异常处理。它工作得很好,但... 查看详情

Spring Boot + 调度程序 + Spring Data JPA + Oracle 中的异常处理

】SpringBoot+调度程序+SpringDataJPA+Oracle中的异常处理【英文标题】:ExceptionHandlinginSpringBoot+Schedulers+SpringDataJPA+Oracle【发布时间】:2022-01-1212:58:10【问题描述】:我正在尝试找出所有异常可以被处理/捕获和处理的其他方式,例如将... 查看详情