博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
SpringMVC(十二)自定义异常处理器 HandlerExceptionResolver(接口)
阅读量:5875 次
发布时间:2019-06-19

本文共 3885 字,大约阅读时间需要 12 分钟。

自定义异常处理器和系统异常处理器的提升版可以实现相同的功能,但是使用的方法不同,自定义异常处理器可以不用在配置文件中配置name多东西,只需要一个异常处理器就可以,有需要的话也可以配置一个视图解析器,但是包扫描器是必须的

先定义一个类让他实现 HandlerExceptionResolver 接口

package demo14SelfException;import org.springframework.web.servlet.HandlerExceptionResolver;import org.springframework.web.servlet.ModelAndView;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;/** * Created by mycom on 2018/3/30. */public class MyHandlerExceptionResolver implements HandlerExceptionResolver {    /**     * 解析异常     * @param httpServletRequest     * @param httpServletResponse     * @param o     * @param ex     * @return     */    public ModelAndView resolveException(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, Exception ex) {        ModelAndView mv=new ModelAndView();        mv.addObject("ex",ex);//保存的数据,在页面上用EL表达式展示错误信息        //如果不满足下面两个条件,就走这个默认的页面        mv.setViewName("error");        //判断异常类型  是用户名异常就到用户名异常类中是年龄异常就到年龄异常类中        if(ex instanceof NameException){            //指定特定的异常页面            mv.setViewName("nameException");        }        if(ex instanceof AgeException){            mv.setViewName("ageException");        }        //最后返回ModelAndView        return mv;    }}

在这个类中需要两个异常类NameException和AgeException

package demo14SelfException;/** * Created by mycom on 2018/3/30. */public class NameException extends Exception {    public NameException() {        super();    }    public NameException(String message) {        super(message);    }}
package demo14SelfException;/** * Created by mycom on 2018/3/30. */public class AgeException extends Exception {    public AgeException() {        super();    }    public AgeException(String message) {        super(message);    }}

在异常控制器中

package demo14SelfException;import org.springframework.stereotype.Controller;import org.springframework.web.bind.annotation.RequestMapping;/** * Created by mycom on 2018/3/30. */@Controllerpublic class ExceptionController {    @RequestMapping("/first")    public String doFirst(String name,int age) throws Exception {        //根据异常的不同返回不同的页面        if(!name.equals("admin")){            //如果用户名输入不正确,走姓名异常这个类            throw new NameException("用户名异常");        }        if(age>60){            throw new AgeException("年龄不符合");        }        //最后成功的话就走成功的页面        return "success";    }}

配置文件中

需要的页面

登录页面

<%--  Created by IntelliJ IDEA.  User: mycom  Date: 2018/3/26  Time: 11:57  To change this template use File | Settings | File Templates.--%><%@ page contentType="text/html;charset=UTF-8" language="java" isELIgnored="false" %>    Title

登录

用户名:
年龄:
出生日期:

普通错误页面

<%--  Created by IntelliJ IDEA.  User: mycom  Date: 2018/3/26  Time: 11:57  To change this template use File | Settings | File Templates.--%><%@ page contentType="text/html;charset=UTF-8" language="java" isELIgnored="false" %>    Title

出错了!!!!

${ex.message}

成功页面

<%--  Created by IntelliJ IDEA.  User: mycom  Date: 2018/3/26  Time: 11:57  To change this template use File | Settings | File Templates.--%><%@ page contentType="text/html;charset=UTF-8" language="java" isELIgnored="false" %>    Title  ${username}登录成功!

姓名错误

<%--  Created by IntelliJ IDEA.  User: mycom  Date: 2018/3/30  Time: 12:35  To change this template use File | Settings | File Templates.--%><%@ page contentType="text/html;charset=UTF-8" language="java" isELIgnored="false" %>    Title姓名不符合 ${ex.message}

年龄错误

<%--  Created by IntelliJ IDEA.  User: mycom  Date: 2018/3/30  Time: 12:35  To change this template use File | Settings | File Templates.--%><%@ page contentType="text/html;charset=UTF-8" language="java" isELIgnored="false" %>    Title年龄不符合 ${ex.message}

 

转载于:https://www.cnblogs.com/my-123/p/8681132.html

你可能感兴趣的文章
mysql 数据类型
查看>>
Ubuntu 设置当前用户sudo免密码
查看>>
设置tomcat远程debug
查看>>
android 电池(一):锂电池基本原理篇【转】
查看>>
Total Command 常用快捷键
查看>>
ionic 调用手机的打电话功能
查看>>
怎么使用阿里云直播服务应用到现在主流直播平台中
查看>>
Xcode全局替换内容,一键Replace
查看>>
1000 加密算法
查看>>
exif_imagetype() 函数在linux下的php中不存在
查看>>
Ruby的case语句
查看>>
Linux的链接文件-ln命令
查看>>
maven的tomcat插件如何进行debug调试
查看>>
table表头固定
查看>>
截取字符串中两个字符串中的字符串
查看>>
spring xml properties split with comma for list
查看>>
判断点是否在三角形内
查看>>
Android实战简易教程-第二十三枪(基于Baas的用户注冊验证username是否反复功能!)...
查看>>
在odl中怎样实现rpc
查看>>
leetcode 110 Balanced Binary Tree
查看>>