• SpringMVC异常处理器


    1.异常

    1.1 异常结构层次

    在这里插入图片描述
    异常主要分为:错误、一般性异常(检查异常)、运行期异常(非受控异常)

    1. 错误:如果应用程序出现了 Error,那么将无法恢复,只能重新启动应用程序,最典型的
      Error 的异常是:OutOfMemoryError
    2. 检查异常:出现了这种异常必须显示的处理,不显示处理 java 程序将无法编译通过
    3. 非受控异常:此种异常可以不用显示的处理,例如被 0 除异常,java 没有要求我们一定要处理

    1.2自定义异常

    自定义异常通常继承于 Exception 或 RuntimeException,到底继承那个应该看具体情况来定。

    
    import java.io.*;
    public class ExceptionTest20 {
        public static void main(String[] args) {
            method1(10, 0);
        }
        private static void method1(int value1, int value2){
        //throws MyException { 
        if (value2 == 0) {
            //抛出非受控异常,方法可以不适用throws 进行声明
            //但也也可以显示的声明
            throw new MyException("除数为 0");
        }
        int value3 = value1 / value2;
        System.out.println(value3);
        }
    }
    //自定义非受控异常
    class MyException extends RuntimeException {
        public MyException() {
        //调用父类的默认构造函数
            super();
        }
        public MyException(String message) {
            //手动调用父类的构造方法
            super(message);
        } 
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28

    2.SpringMVC异常处理器

    2.1 基于配置的异常处理

    SpringMVC提供了一个处理控制器方法执行过程中所出现的异常的接口:HandlerExceptionResolver(要自定义异常类需要时间该接口)

    HandlerExceptionResolver接口的实现类有:DefaultHandlerExceptionResolver和
    SimpleMappingExceptionResolver

    SpringMVC提供了自定义的异常处理器SimpleMappingExceptionResolver,使用方式:

    <bean class="org.springframework.web.servlet.handler.SimpleMappingExceptionResolver"> 
    	
    	<property name="exceptionMappings"> 
    		<props> 
    		 
    			<prop key="java.lang.ArithmeticException">errorprop> 
    		props> 
    	property> 
    	 
    	<property name="exceptionAttribute" value="ex">property> 
    bean>
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18

    2.2 基于注解的异常处理

    实例1:

    //@ControllerAdvice将当前类标识为异常处理的组件 
    @ControllerAdvice
    public class ExceptionController {
        //@ExceptionHandler用于设置所标识方法处理的异常 
        @ExceptionHandler(ArithmeticException.class)
    	//ex表示当前请求处理中出现的异常对象 
        public String handleArithmeticException(Exception ex, Model model){
            model.addAttribute("ex", ex);
            return "error";
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    实例2:
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    2.3 @RestControllerAdvice @ExceptionHandler

    在这里插入图片描述

    在这里插入图片描述

    3.全局异常处理

    在这里插入图片描述
    在这里插入图片描述

    @ControllerAdvice  //控制器增强类
    @Slf4j
    public class ExceptionCatch {
    
        /**
         * 处理不可控异常
         * @param e
         * @return
         */
        @ExceptionHandler(Exception.class)
        @ResponseBody
        public ResponseResult exception(Exception e){
            e.printStackTrace();
            log.error("catch exception:{}",e.getMessage());
    
            return ResponseResult.errorResult(AppHttpCodeEnum.SERVER_ERROR);
        }
    
        /**
         * 处理可控异常  自定义异常
         * @param e
         * @return
         */
        @ExceptionHandler(CustomException.class)
        @ResponseBody
        public ResponseResult exception(CustomException e){
            log.error("catch exception:{}",e);
            return ResponseResult.errorResult(e.getAppHttpCodeEnum());
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
  • 相关阅读:
    docker mysqldump备份/恢复数据库
    【禅道客户案例】同方智慧能源数智化转型新实践 禅道助力前行
    【力扣刷题】预测赢家
    113-JavaSE基础进阶:补充知识-工厂模式、装饰模式
    SonarQube介绍和安装
    如何对医学文本的description进行label和分类
    【Java开发工具】下载安装eclipse并汉化配置教程(所以操作系统通用)
    【最新】TensorFlow、cuDNN、CUDA三者之间的最新版本对应及下载地址
    知道 Redis RDB 这些细节,可以少踩很多坑
    自制Linux精简系统
  • 原文地址:https://blog.csdn.net/weixin_45856470/article/details/128179116