广告
返回顶部
首页 > 资讯 > 后端开发 > Python >SpringMVC 异常处理机制与自定义异常处理方式
  • 898
分享到

SpringMVC 异常处理机制与自定义异常处理方式

2024-04-02 19:04:59 898人浏览 独家记忆

Python 官方文档:入门教程 => 点击学习

摘要

目录springMVC默认处理的几种异常@ResponseStatus异常处理的顺序自定义异常类(springmvc的异常处理)①:自定义异常类②:自定义异常处理器③:配置我们的异常

本节介绍SpringMVC的异常处理机制

首先介绍SpringMVC默认提供了一些Http错误类似码的默认异常处理

如何给一个Controller自定义异常处理

如何为项目做一个全局异常处理

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

  • AnnotationMethodHandlerExceptionResolver:通过注解@ExceptionHandler实现异常理出
  • ResponseStatusExceptionResolver:通过注解@ResponseStatus处理HTTP请求的状态码异常
  • DefaultHandlerExceptionResolver:处理Spring Exception并将其转换为HTTP响应状态码传送的客户端

SpringMVC默认处理的几种异常

Exception HTTP 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(code=HttpStatus.NOT_FOUND,reason="页面未找到")
public class HttpStateCode404Exception extends RuntimeException{
    private static final long serialVersionUID = 1L;
}

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


@Controller
@RequestMapping("handleException")
public class HandleExceptionController {
    
    @RequestMapping("{url}")
    public void handle404(){
        throw new HttpStateCode404Exception();
    }
}

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

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

这里写图片描述

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

再来看看@ExceptionHandler

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

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

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

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

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

具体实现



@ControllerAdvice
public 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;
    }
}

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


<!-- 申明我们的异常解析处理类-->
<bean id="customerExceptionResolver" class="cn.itcast.springmvc.exception.CustomerExceptionResolver"></bean>

以上为个人经验,希望能给大家一个参考,也希望大家多多支持编程网。

--结束END--

本文标题: SpringMVC 异常处理机制与自定义异常处理方式

本文链接: https://www.lsjlt.com/news/155659.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • SpringMVC 异常处理机制与自定义异常处理方式
    目录SpringMVC默认处理的几种异常@ResponseStatus异常处理的顺序自定义异常类(SpringMVC的异常处理)①:自定义异常类②:自定义异常处理器③:配置我们的异常...
    99+
    2022-11-12
  • SpringMVC异常处理机制与自定义异常处理方式的示例分析
    这篇文章主要介绍SpringMVC异常处理机制与自定义异常处理方式的示例分析,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!提到异常处理,就不得不提HandlerExceptionResolvers,我们的Dispat...
    99+
    2023-06-25
  • Java SpringMVC异常处理机制详解
    目录异常处理的思路测试环境准备异常处理两种方式方式一:简单异常处理器方式二:自定义异常处理器总结异常处理的思路 测试环境准备 首先写一个DemoController控制层的类作为测...
    99+
    2022-11-12
  • C#WINFORM自定义异常处理方法
    一个简单的统一异常处理方法。系统底层出现异常,写入记录文件,系统顶层捕获底层异常,显示提示信息。  /// <summary> /// 自定义异常类 ...
    99+
    2022-11-12
  • SpringMVC项目异常处理机制详解
    目录1、异常分类2、自定义项目业务异常3、自定义项目系统异常4、其他异常5、异常代码6、异常处理器7、异常发生1、异常分类 通常分为三类:系统异常(SystemException),...
    99+
    2022-11-13
  • 详解SpringMVC中的异常处理机制
    目录开头1.ExceptionHandlerExceptionResolver2. demo开头 试想一下我们一般怎么统一处理异常呢,答:切面。但抛开切面不讲,如果对每一个contr...
    99+
    2022-11-13
  • 详解SpringMVC的拦截器与异常处理机制
    目录1.SpringMVC拦截器1.1拦截器(interceptor)的作用1.2拦截器和过滤器的区别1.3拦截器的快速入门1.4多拦截器操作1.5拦截器方法说明2.SpringMV...
    99+
    2022-11-13
  • 浅谈几种Java自定义异常处理方式
    目录自定义异常类错误编码处理断言处理应用日志处理异常消息模板和格式化处理总结在Java中,异常是一种常见的处理机制。当程序运行出现错误时,Java会默认抛出一个异常,并通过栈回溯信息...
    99+
    2023-05-19
    Java自定义异常 Java 异常
  • SpringBoot Security的自定义异常处理
    目录SpringBoot Security自定义异常access_denied 方面异常Invalid access token 方面异常Bad credentials 方面异常(登...
    99+
    2022-11-12
  • springboot实现全局异常处理及自定义异常类
    目录全局异常处理及自定义异常类全局异常处理定义一个业务异常的枚举全局异常处理配置springboot Restful使用springboot 返回 ModelAndView全局异常处...
    99+
    2022-11-13
  • SpringBoot Security如何自定义异常处理
    这篇文章主要为大家展示了“SpringBoot Security如何自定义异常处理”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“SpringBoot Security如何自定...
    99+
    2023-06-22
  • Java SpringMVC拦截器与异常处理机制详解分析
    目录拦截器(interceptor)的作用拦截器快速入门案例:用户登录权限控制拦截器方法说明SpringMVC异常处理异常处理的思路异常处理两种方式拦截器(interceptor)的...
    99+
    2022-11-12
  • 【JAVA 异常处理机制】
    文章目录 前言1.java异常处理机制2.try-catch3.finally块4.自动关闭特性5.throw关键字6.throws关键字7.throws的重写规则8.异常分类9.异常API10.自定义异常总结: 前言 在Ja...
    99+
    2023-08-23
    java 开发语言 学习 intellij idea
  • springmvc 获取@Requestbody转换的异常处理方式
    1、引入问题 使用spring 自动的@RequestBody,可以很方便的将参数转换成对象,然而在自动转换中出现如果出现异常,会默认直接发送HTTP异常代码和错误信息,如何才能自定...
    99+
    2022-11-12
  • Java自定义异常与异常使用的最佳方式
    目录异常的分类1. 非运行时异常(Checked Exception)2. 运行时异常(Runtime Exception/Unchecked Exception)异常的处理一、对应非运行时异常,必须对其进行处理二、对于运行时异常,可以不对...
    99+
    2019-09-12
    Java异常 自定义异常 异常使用
  • shiro与spring security用自定义异常处理401错误
    目录shiro与spring security自定义异常处理401背景解决方案SpringBoot整合Shiro自定义filter报错No SecurityManager acces...
    99+
    2022-11-12
  • PHP中怎么自定义异常处理器
    本篇文章为大家展示了PHP中怎么自定义异常处理器,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。1、异常类的层级关系:class NotFoundException extends...
    99+
    2023-06-17
  • Spring Boot 中自定义异常怎么处理
    这篇文章将为大家详细讲解有关Spring Boot 中自定义异常怎么处理,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。在 Spring Boot 项目中 ,异常统一处理,可以使用 Spring 中 @Co...
    99+
    2023-06-02
  • 自定义注解和springAOP捕获Service层异常,并处理自定义异常操作
    一 自定义异常 public class NoParamsException extends Exception { //用详细信息指定一个异常 public ...
    99+
    2022-11-12
  • Java异常的处理机制
    图片解析: 1.生成字节码文件的过程可能产生编译时异常(checked),由字节码文件到在内存中加载、运行类此过程可能产生运行时异常(unchecked), 2.JAVA程序在执行...
    99+
    2022-11-12
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作