博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
SpringMVC中异常处理详解
阅读量:6001 次
发布时间:2019-06-20

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

Spring MVC处理异常最基本的就是HandlerExceptionResolver这个接口,先看张图

分析上图可以轻松总结出,spring mvc里有三种异常处理方法:

1.使用官方提供的简单异常处理器SimpleMappingExceptionResolver

使用示例

springMVC-servlet.xml

定义默认的异常处理页面,当该异常类型的注册时使用
定义异常处理页面用来获取异常信息的变量名,默认名为exception
定义需要特殊处理的异常,用类名或完全路径名作为key,异常也页名作为值
error-my 这里还可以继续扩展对不同异常类型的处理

MyExceptionHandler.java

public class MyExceptionHandler{        @ExceptionHandler    public ModelAndView resolveException(HttpServletRequest request,            HttpServletResponse response, Object handler, Exception ex) {        Map
map = new HashMap
(); map.put("ex",ex); // 根据获取的Exception参数进行view跳转 if (ex instanceof MyException) { return new ModelAndView("error-my",map); } else { return new ModelAndView("error",map); } }}

定义了这样一个异常处理器之后就要在springMVC-servlet.xml中定义这样一个bean对象,如

2.使用@ResponseStatus注解

带有@ResponseStatus注解的异常类会被ResponseStatusExceptionResolver 解析。可以实现自定义的一些异常,同时在页面上进行显示。

使用示例

首先定义一个异常类:

@ResponseStatus(value = HttpStatus.FORBIDDEN,reason = "用户名和密码不匹配!")public class UserNameNotMatchPasswordException extends RuntimeException{        }

抛出一个异常:

@RequestMapping("/testResponseStatusExceptionResolver")    public String testResponseStatusExceptionResolver(@RequestParam("i") int i){        if (i==13){            throw new UserNameNotMatchPasswordException();        }        System.out.println("testResponseStatusExceptionResolver....");        return "success";    }

输入如下额路径:

http://localhost:8090/testResponseStatusExceptionResolver?i=13

当然,也可以在方法上进行修饰:

@ResponseStatus(reason = "测试",value = HttpStatus.NOT_FOUND)    @RequestMapping("/testResponseStatusExceptionResolver")    public String testResponseStatusExceptionResolver(@RequestParam("i") int i){        if (i==13){            throw new UserNameNotMatchPasswordException();        }        System.out.println("testResponseStatusExceptionResolver....");        return "success";    }

这时所有的请求都会报错。

3.使用全局异常处理

你可能感兴趣的文章
MySQL 5.7.9版本sql_mode=only_full_group_by问题
查看>>
企业级缓存系统varnish应用
查看>>
python day01
查看>>
数据字典的设计--1.首页功能实现
查看>>
win7 右键菜单残影 消除方法
查看>>
泰坦尼克 学习
查看>>
BZOJ 3717: [PA2014]Pakowanie
查看>>
JAVA的Date类与Calendar类(常用方法)
查看>>
远程控制centOS桌面
查看>>
leetcode345
查看>>
leetcode540
查看>>
redis 创建集群时 出现的错误解决方式
查看>>
未能加载文件或程序集“microsoft.Build.Engine, Version=3.5.0.0,...”或它的摸一个依赖项。...
查看>>
数据库程序接口——JDBC——API解读第二篇——执行SQL的核心对象
查看>>
数据库进阶
查看>>
201521123068 《java程序设计》 第13周学习总结
查看>>
c++_分巧克力(75分)
查看>>
函数内变量作用域面试题
查看>>
MySQL-----临时表
查看>>
ASCII码表完整版
查看>>