[springMVC学习]12、异常处理

生活中,最使人疲惫的往往不是道路的遥远,而是心中的郁闷;最使人痛苦的往往不是生活的不幸,而是希望的破灭;最使人颓废的往往不是前途的坎坷,而是自信的丧失;最使人绝望的往往不是挫折的打击,而是心灵的死亡。所以我们要有自己的梦想,让梦想的星光指引着我们走出落漠,走出惆怅,带着我们走进自己的理想。

导读:本篇文章讲解 [springMVC学习]12、异常处理,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com,来源:原文

目录

简介

局部异常

全局异常

自定义异常

SimpleMappingExceptionResolver异常统一处理

异常处理顺序

总结


简介

        在程序运行的过程中,难免会出现异常,如果我们没有做处理,那么前端页面显示的信息就会很不友好。在springMVC中提供了异常处理机制,通过注解就可以设置不同异常发生后,前端显示不同的信息。


局部异常

        下面代码就会产生一个异常

    @RequestMapping("/f1")
    public String f1() {
        int a = 1 / 0;
        return "success";
    }

        看一下前端显示页面

[springMVC学习]12、异常处理

         下面就使用springmvc提供的异常处理来统一进行处理,需要写在当前的类里面

    //改注解value里面写上想要捕获的异常
    @ExceptionHandler({ArithmeticException.class})
    public String handleException(Exception e, HttpServletRequest request) {
        request.setAttribute("message", e.getMessage());
        return "fail_exception";
    }
}

         创建一个错误提示页面

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>异常</title>
</head>
<body>
<h1>发生异常啦</h1>
<p>异常信息是:${message}</p>
</body>
</html>

         再次访问,查看信息

[springMVC学习]12、异常处理

        可以发现友好了很多。注意:@ExceptionHandleer只会捕获当前类里面发生的异常,异常信息可以通过参数来进行获取


全局异常

        上面的是局部异常,只能在一个类里面进行生效,下面来介绍全局异常。

@ControllerAdvice
public class GlobalException {

    //捕获类型转换异常
    @ExceptionHandler({NumberFormatException.class})
    public String f(Exception e, HttpServletRequest request) {
        request.setAttribute("message", e.getMessage());
        return "fail_exception";
    }
}

        全局异常我们使用@ControllerAdvice进行标识,然后里面的方法还是用@ExceptionHandler进行标识,在这里的异常处理会对所有的Handler都生效。下面代码会抛出一个异常,看是否能够处理

    @RequestMapping("/f2")
    public String f2() {
        int a = Integer.parseInt("abc");
        return "success";
    }

        前端页面显示如下,可以进行捕获

[springMVC学习]12、异常处理 

        有一点需要注意的是,异常捕获顺序是先在当前类里面标识@ExceptionHandler进行匹配,匹配不上再开始去@ControllerAdvice里面标识@ExceptionHandler进行匹配


自定义异常

        我们还可以使用@ResponseStatus来进行自定义异常的捕获

@ResponseStatus(reason = "年龄必须在18以上...", code = HttpStatus.INTERNAL_SERVER_ERROR)
public class AgeException extends RuntimeException{
}

         上面代码我们定义了一个异常,使用@ResponseStatus进行标识,reason就是标识异常的原因,code就是要返回给前端的状态码。

        下面创建一个handler进行测试

    @RequestMapping("/f3")
    public String f3() {
        if (1 > 0) {
            throw new AgeException();
        }
        return "success";
    }

        前端页面显示如下

[springMVC学习]12、异常处理


 SimpleMappingExceptionResolver异常统一处理

        我们可以直接在配置文件中配置不同的异常要跳转的视图

    <bean class="org.springframework.web.servlet.handler.SimpleMappingExceptionResolver">
        <property name="exceptionMappings">
            <props>
                <prop key="java.lang.RuntimeException">fail_exception</prop>
                <prop key="java.lang.ClassCastException">fail_exception</prop>
            </props>
        </property>
    </bean>

         这样配置之后不同的异常将会跳转到不同的视图


异常处理顺序

        异常处理的顺序就是  局部异常 > 全局异常 > SimpleMappingExceptionResolver > tomcat默认异常处理机制


总结

        异常处理使用比较简单,如果想了解原理,自行debug即可

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/140238.html

(0)
飞熊的头像飞熊bm

相关推荐

发表回复

登录后才能评论
极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!