美文网首页Java 杂谈程序员
SprnigMVC的统一异常处理

SprnigMVC的统一异常处理

作者: 雁归来兮 | 来源:发表于2018-02-27 08:53 被阅读0次

我们知道,系统中异常包括:编译时异常和运行时异常RuntimeException,前者通过捕获异常从而获取异常信息,后者主要通过规范代码开发、测试通过手段减少运行时异常的发生。在开发中,不管是dao层、service层还是controller层,都有可能抛出异常,在springmvc中,能将所有类型的异常处理从各处理过程解耦出来,既保证了相关处理过程的功能较单一,也实现了异常信息的统一处理和维护。这篇博文主要总结一下SpringMVC中如何统一处理异常。

其中实现的方法分别包括以下:

序号 实现方式 备注
1 实现SimpleMapperExceptionResolver 配置文件中配置
2 实现HandleExceptionResolver接口 配置实现装配bena
3 @ExceptionHandler注解 侵入式代理,不建议使用

装配SimpleMapperHandlerResolver对象

在spring-mvc的配置文件中,配置该对象即可,具体信息请 参考注释

    <!--配置SpringMVC异常处理页面-->
    <bean class="org.springframework.web.servlet.handler.SimpleMappingExceptionResolver">
    <!--当发生异常的时候,跳转到此URL-->
        <property name="defaultErrorView" value="/error/default"/>
        <!--传入的参数名称为ex-->
        <property name="exceptionAttribute" value="ex"/>
        <!--自定义异常页面-->
        <!--根据发生的异常来分别处理-->
        <property name="exceptionMappings">
            <props>
                <prop key="com.tao.spring.exception.DataValidateException">/error/datavalidate</prop>
            </props>
        </property>
    </bean>

其中DataValidateException是自定义的异常类,其代码如下

public class DataValidateException extends RuntimeException {

    private String message;
    
    public DataValidateException(String message) {
        super(message);
    }

    @Override
    public String getMessage() {
        return message;
    }

    public void setMessage(String message) {
        this.message = message;
    }
}

然后在Controller层或者Service层,以及DAO层来尝试抛出异常,可查看是否跳转到异常处理页面

实现HandlerExceptionResolver接口

实现此接口,需要实现相应的方法,在此代码中可以判断抛出的异常类型,来实现自定义异常处理,如下

public class CustomHandleExceptionResolver implements HandlerExceptionResolver {

    public ModelAndView resolveException(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) {
        if (ex instanceof DataValidateException) {
            System.out.println("发生了自定义异常");
        }
        if (ex instanceof NullPointerException){
            System.out.println("发生了空指针异常");
        }
        
        ModelAndView modelAndView=new ModelAndView();
        return modelAndView;
    }
}

使用@ExceptionHandler注解

首先写个BaseController类,并在类中使用@ExceptionHandler注解声明异常处理的方法,如:

public class BaseController { 
    @ExceptionHandler  
    public String exp(HttpServletRequest request, Exception ex) { 
    //TODO 异常处理
    }
}

然后将所有需要异常处理的Controller都继承这个BaseController,虽然从执行来看,不需要配置什么东西,但是代码有侵入性,需要异常处理的Controller都要继承它才行。在以后的修改,远远不如使用配置文件来得方便。

参考文档:http://blog.csdn.net/eson_15/article/details/51731567

相关文章

  • SprnigMVC的统一异常处理

    我们知道,系统中异常包括:编译时异常和运行时异常RuntimeException,前者通过捕获异常从而获取异常信息...

  • spring/springmvc 全局异常处理

    1.在项目中为什么要统一异常处理 当异常返回到前端页面的时候可以统一处理,避免前端无法处理异常 不做统一异常处理,...

  • 统一异常处理

    一、什么是统一异常处理 1、制造异常 2、什么是统一异常处理我们想让异常结果也显示为统一的返回结果对象,并且统一处...

  • springboot全局异常处理

    一、单个controller范围的异常处理/** 统一异常处理 @return*/@RequestMapping(...

  • springboot之统一异常处理

    spring统一异常处理 使用spring的统一异常处理,我们就不再需要在业务代码中就行显式的捕获异常处理,在da...

  • 统一异常处理

    1.定义返回结果对象 2.定义返回结果工具类, 3.枚举消息状态 .4.自定义异常类 5.统一异常拦截 6.业务中...

  • 统一异常处理

    首先,利用枚举,来定义异常类型。定义枚举ResultEnum: 自定义异常,新建CustomException类:...

  • 统一异常处理

    简要描述: 在web层controller业务代码中,一般不要处理任何异常,将异常完全跑出,由ExceptionH...

  • 统一异常处理

    Overview 利用Spring AOP思想,对项目中的异常进行统一处理。 实现思路 通过@Controller...

  • JAVA 异常控制

    文章 Spring RestFul API统一异常处理SpringBoot RESTful 应用中的异常处理小结S...

网友评论

    本文标题:SprnigMVC的统一异常处理

    本文链接:https://www.haomeiwen.com/subject/zuhpxftx.html