zoukankan      html  css  js  c++  java
  • SpringMVC异常处理

    一、在 SpringMVC 的配置文件中配置 SimpleMappingExceptionResolver 进行全局的异常处理

    复制代码
    <!-- 全局异常配置 start  控制器异常处理-->  
           <bean id="exceptionResolver" class="org.springframework.web.servlet.handler.SimpleMappingExceptionResolver">  
               <property name="exceptionMappings">  
                   <props>  
                       <prop key="java.lang.Exception">errors/exceptionError</prop>  
                       <prop key="java.lang.Throwable">errors/throwableError</prop>  
                   </props>  
               </property>  
               <property name="statusCodes">  
                   <props>  
                       <prop key="errors/500">500</prop>  
                       <prop key="errors/404">404</prop>  
                       <prop key="errors/400">400</prop>  
                   </props>  
               </property>  
               <!-- 设置日志输出级别,不定义则默认不输出警告等错误日志信息 -->  
               <property name="warnLogCategory" value="WARN"></property>  
               <!-- 默认错误页面,当找不到上面mappings中指定的异常对应视图时,使用本默认配置 -->  
               <property name="defaultErrorView" value="errors/error"></property>  
               <!-- 默认HTTP状态码 -->  
               <property name="defaultStatusCode" value="500"></property>  
           </bean>  
           <!-- 全局异常配置 end -->
    复制代码


    二、使用 ExceptionHandlerExceptionResolver

      ExceptionHandlerExceptionResolver 主要处理类和方法中使用 @ControllAdvise 和 @ExceptionHandler(ArithmeticException.class) 注解定义的方法。

      1、在 SpringMVC 配置文件中 添加 <mvc:annotation-driven/> 配置,该配置会自动注册三个 Bean,分别是 DefaultHandlerExceptionResolver
       ResponseStatusExceptionResolver、ExceptionHandlerExceptionResolver。  

      2、创建普通的JavaBean,在类上添加 @ControllAdvise 注解,在处理异常的方法上添加 @ExceptionHandler(ArithmeticException.class) 注解。

    复制代码
    package com.springmvc.handlers;
    
    import org.springframework.web.bind.annotation.ControllerAdvice;
    import org.springframework.web.bind.annotation.ExceptionHandler;
    import org.springframework.web.servlet.ModelAndView;
    
    @ControllerAdvice
    public class MyExceptionHandler {
        
        @ExceptionHandler(ArithmeticException.class)
        public ModelAndView handleArithmeticException(Exception e){
            ModelAndView mv = new ModelAndView("error");
            mv.addObject("exception", e);
            System.out.println("出异常了:" + e);
            return mv;
        }
    
    }
    复制代码

    如果在类上不添加 @ControllerAdvice 注解,只是用 @ExceptionHandler 注解修饰异常处理方法,则该异常处理方法只能处理本类中的异常,不能全局使用。

    /**
      * 1. 在 @ExceptionHandler 方法的入参中可以加入 Exception 类型的参数, 该参数即对应发生的异常对象
      * 2. @ExceptionHandler 方法的入参中不能传入 Map. 若希望把异常信息传导页面上, 需要使用 ModelAndView 作为返回值
      * 3. @ExceptionHandler 方法标记的异常有优先级的问题. 
      * 4. @ControllerAdvice: 如果在当前 Handler 中找不到 @ExceptionHandler 方法来出来当前方法出现的异常, 
      * 则将去 @ControllerAdvice 标记的类中查找 @ExceptionHandler 标记的方法来处理异常. 
      */

  • 相关阅读:
    Flutter 使用Navigator进行局部跳转页面
    Flutter “孔雀开屏”的动画效果
    ORA-04063: package body "DBSNMP.BSLN" has errors
    ORA-04063: package body "DBSNMP.BSLN_INTERNAL" has errors
    Oracle 11gR2 待定的统计信息(Pending Statistic)
    Oracle查询dba_extents视图很慢
    Oracle查询表空间使用率很慢
    Oracle收集对表收集统计信息导致全表扫描直接路径读?
    Oracle IO性能测试
    Oracle Online Patching报错"This is not a RAC setup. OPatch cannot determine the local node name"
  • 原文地址:https://www.cnblogs.com/wdas-87895/p/6770398.html
Copyright © 2011-2022 走看看