千家信息网

SpringMVC异常处理机制与自定义异常处理方式的示例分析

发表于:2026-11-01 作者:千家信息网编辑
千家信息网最后更新 2026年11月01日,这篇文章主要介绍SpringMVC异常处理机制与自定义异常处理方式的示例分析,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!提到异常处理,就不得不提HandlerExceptio
千家信息网最后更新 2026年11月01日SpringMVC异常处理机制与自定义异常处理方式的示例分析

这篇文章主要介绍SpringMVC异常处理机制与自定义异常处理方式的示例分析,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!

提到异常处理,就不得不提HandlerExceptionResolvers,我们的DispatcherServlet默认设置三个异常处理器:

  • AnnotationMethodHandlerExceptionResolver:通过注解@ExceptionHandler实现异常理出

  • ResponseStatusExceptionResolver:通过注解@ResponseStatus处理HTTP请求的状态码异常

  • DefaultHandlerExceptionResolver:处理Spring Exception并将其转换为HTTP响应状态码传送的客户端

SpringMVC默认处理的几种异常

ExceptionHTTP Status Code

BindException

400 (Bad Request)

ConversionNotSupportedException

500 (Internal Server Error)

HttpMediaTypeNotAcceptableException

406 (Not Acceptable)

HttpMediaTypeNotSupportedException

415 (Unsupported Media Type)

HttpMessageNotReadableException

400 (Bad Request)

HttpMessageNotWritableException

500 (Internal Server Error)

HttpRequestMethodNotSupportedException

405 (Method Not Allowed)

MethodArgumentNotValidException

400 (Bad Request)

MissingServletRequestParameterException

400 (Bad Request)

MissingServletRequestPartException

400 (Bad Request)

NoHandlerFoundException

404 (Not Found)

NoSuchRequestHandlingMethodException

404 (Not Found)

TypeMismatchException

400 (Bad Request)

MissingPathVariableException

500 (Internal Server Error)

NoHandlerFoundException

404 (Not Found)

首先介绍的是注解@ResponseStatus

@ResponseStatus

用于自定义异常类上

该异常属于某种HTTP错误状态码异常(或者说交由其处理)

例如:我们自定义一个异常类:HttpStateCode404Exception,将其映射到404状态码

异常类:HttpStateCode404Exception.java

/** *使用@ResponseStatus只能实现简单的提示 *当程序中抛出HttpStateCode404Exception会使用提示语:页面未找到 */@ResponseStatus(code=HttpStatus.NOT_FOUND,reason="页面未找到")public class HttpStateCode404Exception extends RuntimeException{    private static final long serialVersionUID = 1L;}

然后我们在一个Controller类处理/handleException/存在在的映射路径时的处理方法

@Controller@RequestMapping("handleException")public class HandleExceptionController {    /*@ExceptionHandler({Throwable.class})    public String handleThisController(){        return "/handleException/404";    }*/    @RequestMapping("{url}")    public void handle404(){        throw new HttpStateCode404Exception();    }}

细心的读者,一定会发现,我在上面注掉的代码使用了@ExceptionHandler注解

最终我们可以得到错误页面提示是这样的:好丑,但是有我们的reason

此方式只能实现简单的信息提示。

再来看看@ExceptionHandler

打开上面被注释掉的代码,你会发现我们的错误控制可以(转发)跳转页面了。

而且由于我们的这个方法定义在这个Controller类中,只要满足此@ExceptionHandler定义的异常都会走这个方法。

注意:是这个Controller类中所有请求出现异常,且异常被其包含

我希望定义一个全局异常处理呢???@ControllerAdvice

为我们实现处理所以的控制器Controllers的异常

具体实现

/** * 定义一个处理所有Controllers的ExceptionHandler */@ControllerAdvicepublic class GlobalExceptionAdvice {    @ExceptionHandler({HttpStateCode404Exception.class})    public String handleThisController(){        return "/handleException/404";    }    /*处理其他异常...*/}

异常处理的顺序

1.Controller处理时抛出异常

2.本Controller类中的@ExceptionHandler如果捕获到,就执行其处理方法

3.否则,由全局异常捕获处理

4.否则,由@ResponseStatus注解的异常捕获处理

5.最后DefaultHandlerExceptionResolver处理

这恰恰也就是DispatcherServlet异常处理器的配置顺序(循序调用,List)

自定义异常类(SpringMVC的异常处理)

SpringMVC当中的异常处理-自定义异常处理类

①:自定义异常类

public class CustomerException extends Exception {    //定义我们的异常信息    private String exceptMsg;    public CustomerException(String exceptMsg){        this.exceptMsg = exceptMsg;    }    public String getExceptMsg() {        return exceptMsg;    }    public void setExceptMsg(String exceptMsg) {        this.exceptMsg = exceptMsg;    }}

②:自定义异常处理器

import java.io.PrintWriter;import java.io.StringWriter;import javax.jws.WebParam.Mode;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import org.omg.CORBA.PRIVATE_MEMBER;import org.springframework.web.servlet.HandlerExceptionResolver;import org.springframework.web.servlet.ModelAndView;public class CustomerExceptionResolver implements HandlerExceptionResolver {    @Override    public ModelAndView resolveException(HttpServletRequest request, HttpServletResponse response, Object handler,Exception ex) {        //通过我们自定义异常处理器,继承自HandlerExceptionResolver  来实现我们的异常处理        //自定义我们的异常信息        String  msg = "";        //通过ModelAndView 来实现跳转到我们的错误页面,并且将错误信息带回到页面进行显示        ModelAndView view = new ModelAndView();        view.setViewName("error");        //取出我们自定义的异常信息        if(ex instanceof CustomerException){            CustomerException exception = (CustomerException) ex;            msg = exception.getExceptMsg();        }else{            //获取我们的stringWriter来获取我们的异常信息            StringWriter writer = new StringWriter();            PrintWriter printWriter = new PrintWriter(writer);            //通过ex.printStackTrace(printWriter);来向我们的printWriter当中输入异常信息            ex.printStackTrace(printWriter);            msg = writer.toString();        }        //获取到异常信息之后,通过短信,邮件等技术,通知相关人员        view.addObject("msg", msg);        return view;    }}

③:配置我们的异常处理器

以上是"SpringMVC异常处理机制与自定义异常处理方式的示例分析"这篇文章的所有内容,感谢各位的阅读!希望分享的内容对大家有帮助,更多相关知识,欢迎关注行业资讯频道!

处理 信息 页面 处理器 注解 错误 方法 状态 提示 方式 机制 示例 分析 代码 全局 内容 篇文章 顺序 控制 配置 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 湖北九亚互联网络科技有限公司 华服互联网科技靠谱吗 中国互联网科技工作委员会毛军 互联网科技保险 互联网 科技 金融科技与互联网金融相同和不同 中化能源互联网科技招聘 互联网科技项目计划书材料类 科技互联网大厂 浙江互联网科技研学营 千方科技属于互联网企业吗 卓翼科技产业互联网合作 国大互联网教育科技有限公司薪资 互联网金融科技元年 雨阳互联网卡科技有限公司 从那以后互联网科技有限公司 上海同邻互联网科技有限公司规模 北京军民互联网科技公司 黑龙江互联网科技公司 武汉亿视互联网科技有限公司 咖啡 手冲咖啡和咖啡机区别 科技创新与互联网经济 科技互联网公司装修 广州互联网科技公司 亿人帮互联网科技 互联网还是高科技吗 企晟互联网信息科技有限公司 保险科技服务互联网营销体系 滨湖区互联网智能科技产品有哪些
0