• Spring MVC中如何对异常进行处理呢?


    转自:

    Spring MVC中如何对异常进行处理呢?

    在SpringMVC开发中,我们难以避免出现一些异常错误现象的发生,那么我们如何在代码中捕捉异常呢?下文将一一道来,如下所示:
     
    Spring MVC 拥有以下三种异常处理方法:

     1.运用Spring MVC提供的简单异常处理器 SimpleMappingExceptionResolver。
     2.自身实现一个Spring 的异常处理接口 HandlerExceptionResolver,自定义自己的异常处理器。
     3.运用 @ExceptionHandler注解实现异常处理

    一、 @ExceptionHandler 

     
    @RequestMapping("/testException")
    public String testExceptionHandle(@RequestParam("i") Integer i) {
        System.out.println(10 / i);
        return "ok";
    }

    /*
    当我们输入参数0时,则会产生算数错误
    */

    当我们在同一个类中定义处理异常的方法。
    @ExceptionHandler({ ArithmeticException.class })
    public String testArithmeticException(Exception e) {
        System.out.println("打印错误信息 ===> ArithmeticException:" + e);
        //跳转到错误的页面
        return "error";
    }


    注意事项:SpringMVC的注解不是加在产生异常的方法上,而是加在处理异常的方法上

    error.jsp页面信息如下所示:
    <%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>




    错误页面


        发生算术运算异常,请重新输出数据!




    访问地址:http://localhost:8080/com.java265/testExceptionHandle?i=0,页面跳转到 error.jsp 

    控制台则会输出以下信息:
    打印错误信息 ===> ArithmeticException:java.lang.ArithmeticException: / by zero

    @ExceptionHandler 注解所在方法的优先级说明
      如发生的是 NullPointerException,但是声明的异常有 RuntimeException 和 Exception,这时候会根据异常的最近继承关系找到继承深度最浅的那个@ExceptionHandler 注解方法,
      即标记了 RuntimeException 的方法。
    被 @ExceptionHandler 标记为异常处理方法,不能在方法中设置别的形参。但是可以使用 ModelAndView 向前台传递数据。

    使用局部异常处理,仅能处理某个 Controller 中的异常,若需要对所有异常进行统一处理,可使用以下两种方法

    二、 HandlerExceptionResolver

       Spring MVC 通过 HandlerExceptionResolver 处理程序异常,如:处理器异常、数据绑定异常以及控制器执行时发生的异常。HandlerExceptionResolver 仅有一个接口方法

    public interface HandlerExceptionResolver {
        @Nullable
        ModelAndView resolveException(
                HttpServletRequest request, HttpServletResponse response, @Nullable Object handler, Exception ex);
    }

    发生异常时,Spring MVC 会调用 resolveException() 方法,并转到 ModelAndView 对应的视图中,返回一个异常报告页面反馈给用户。

    例: com.java265.exception 包中创建一个 HandlerExceptionResolver 接口的实现类 MyExceptionHandler,代码如下。
    package com.java265.exception;
    import java.util.HashMap;
    import java.util.Map;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    import org.springframework.web.servlet.HandlerExceptionResolver;
    import org.springframework.web.servlet.ModelAndView;
    public class MyExceptionHandler implements HandlerExceptionResolver {
        @Override
        public ModelAndView resolveException(HttpServletRequest arg0, HttpServletResponse arg1, Object arg2,
                Exception arg3) {
            Map model = new HashMap();
            // 根据不同错误转向不同页面(统一处理),即异常与View的对应关系
            if (arg3 instanceof ArithmeticException) {
                return new ModelAndView("error", model);
            }
            return new ModelAndView("error-2", model);
        }
    }


    在 springmvc-servlet.xml 中配置bean



    再次访问 http://localhost:8080/com.java265/testExceptionHandle?i=0,页面跳转到 error.jsp 页面 
     

    三、SimpleMappingExceptionResolver

    全局异常处理可使用 SimpleMappingExceptionResolver 来实现。它将异常类名映射为视图名,即发生异常时使用对应的视图报告异常。

    在 springmvc-servlet.xml 中配置全局异常,代码如下。

       
       
       
       
       
       
           
                error
               
           

       


    再次访问 http://localhost:8080/com.java265/testExceptionHandle?i=0,页面跳转到 error.jsp 页面 

  • 相关阅读:
    五、T100固定资产之固定资产盘点管理篇
    Linux学习教程(第五章 Vim文本编辑器及其应用)一
    k8s-11 网络策略
    pytorch中的池化函数
    Charles断点
    【算法每日一练]-图论(保姆级教程 篇2(topo排序,并查集,逆元))#topo排序 #最大食物链 #游走 #村村通
    智能驾驶功能软件平台设计规范 第二部分:感知融合功能服务接口
    网络安全(黑客)自学
    DailyPractice.2023.10.14
    centos7离线安装neo4j
  • 原文地址:https://blog.csdn.net/qq_25073223/article/details/127830321