SpringMVC——异常处理

  • Spring MVC 通过 HandlerExceptionResolver 处理程序的异常,包括 Handler 映射、数据绑定以及目标方法执行时发生的异常。
  • SpringMVC 提供的 HandlerExceptionResolver 的实现类

<mvc:annotation-driven/>在容器中注册org.springframework.web.servlet.mvc.method.annotation.ExceptionHandlerExceptionResolver

ExceptionHandlerExceptionResolver

  • 主要处理 Handler 中用 @ExceptionHandler 注解定义的方法。
package com.nchu.mybatis.controller;
/**
 * Created by yangshijing on 2017/12/26 0026.
 */
//@SessionAttributes(value={"user"}, types={String.class})
@RequestMapping("/test")
@Controller
public class SpringMVCTest {
    private static final String SUCCESS = "success";
    @RequestMapping("/testHandlerExceptionResolver")
    public  String testHandlerExceptionResolver(@RequestParam("i") int i){
        int a = 10/i;
        return SUCCESS;
    }
    /**
     * 测试SpringMVC对异常的处理
     * 1. 在 @ExceptionHandler 方法的入参中可以加入 Exception 类型的参数, 该参数即对应发生的异常对象
     * 2. @ExceptionHandler 方法的入参中不能传入 Map. 若希望把异常信息传导页面上,    * 需要使用 ModelAndView 作为返回值
     * 3. @ExceptionHandler 方法标记的异常有优先级的问题.
     * 4. @ControllerAdvice: 如果在当前 Handler 中找不到 @ExceptionHandler    * 方法来处理当前方法出现的异常,则将去 @ControllerAdvice 标记的类中查找   * @ExceptionHandler 标记的方法来处理异常.
     */
    @ExceptionHandler({RuntimeException.class})
    public ModelAndView testException(Exception  ex){
        ModelAndView modelAndView = new ModelAndView("error");
        modelAndView.addObject("exception", ex);
        return modelAndView;
    }
}
  • @ExceptionHandler 注解定义的方法优先级问题:例如发生的是NullPointerException,但是声明的异常有RuntimeException 和 Exception,此候会根据异常的最近继承关系找到继承深度最浅的那个 @ExceptionHandler注解方法,即标记了 RuntimeException 的方法
  • ExceptionHandlerMethodResolver 内部若找不到@ExceptionHandler 注解的话,会找@ControllerAdvice 中的@ExceptionHandler 注解方法
package com.nchu.mybatis.controller;

import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.servlet.ModelAndView;

/**
 * Created by yangshijing on 2018/1/7 0007. * 自定义异常处理类,会对全局声明的异常进行处理
 */
@ControllerAdvice
public class NchuException {
    @ExceptionHandler({ArithmeticException.class})
    public ModelAndView testException(Exception  ex){
        ModelAndView modelAndView = new ModelAndView("error");
        modelAndView.addObject("exception", ex);
        System.out.print("12344");
        return modelAndView;
    }
}

原文地址:https://www.cnblogs.com/realshijing/p/8229079.html

时间: 2024-08-29 10:15:40

SpringMVC——异常处理的相关文章

SpringMVC 异常处理

一.异常解析器应该具有的功能: 1.既然使用异常解析器,那么就不必在Controller中对异常进行处理,抛出即可,简化开发,异常统一控制. 2.ajax请求(有@ResponseBody的Controller)发生错误,输出JSON. 3.页面请求(无@ResponseBody的Controller)发生错误,输出错误页面. 4. 它需要与AnnotationMethodHandlerAdapter使用同一个messageConverters 5.异常处理细节可控制. 二.SpringMVC异

SpringMVC异常处理

为了统一处理代码执行过程中出现的异常.给用户一个更友好的异常界面,须要引入springMVC的异常处理功能,为了演示这个功能,本文实现一个比較经常使用的需求. 将所有的异常归为两类,一类是程序猿自己创建的异常类,还有一类是系统或框架定义的异常类.程序猿自己定义的异常类在界面上输出异常信息,而系统定义好的异常所有统一输出"未知错误". 引发异常后.跳转到异常页面,而且进行读秒,三秒后自己主动跳转到请求发生的页面,或者由程序猿定义好的页面. 为了实现该功能,首先写一个自己的异常类,我这里命

SpringMVC异常处理方式

一.描述 在J2EE项目的开发中,不管是对底层的数据库操作过程,还是业务层的处理过程,还是控制层的处理过程,都不可避免会遇到各种可预知的.不可预知的异常需要处理.每个过程都单独处理异常,系统的代码耦合度高,工作量大且不好统一,维护的工作量也很大. 那么,能不能将所有类型的异常处理从各处理过程解耦出来,这样既保证了相关处理过程的功能较单一,也实现了异常信息的统一处理和维护?答案是肯定的.下面将介绍使用Spring MVC统一处理异常的解决和实现过程. 二.Spring MVC处理异常常见方式 Sp

SpringMVC异常处理一

现在模拟登录的时候,如果用户名或者密码发生异常的时候,使其跳转到自定义的错误页面中去 error.jsp <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" &qu

SpringMVC源码分析-400异常处理流程及解决方法

本文设计SpringMVC异常处理体系源码分析,SpringMVC异常处理相关类的设计模式,实际工作中异常处理的实践. 问题场景 假设我们的SpringMVC应用中有如下控制器: 代码示例-1 @RestController("/order") public class OrderController{ @RequestMapping("/detail") public Object orderDetail(int orderId){ // ... } } 这个控制

SpringMvc如何进行异常处理以及常见的注解

1.SpringMvc异常处理方法: 1.1  局部处理  使用@ExceptionHandler注释 @ExceptionHandler //当该类中发生异常时会由该方法来处理,该方法的Exception会接收异常对象 public ModelAndView error(Exception exception) { ModelAndView mv=new ModelAndView(); mv.addObject("error", exception.getMessage()); mv

【转】springmvc源码分析链接

SpringMVC源码 SpringMVC源码分析系列 说到java的mvc框架,struts2和springmvc想必大家都知道,struts2的设计基本上完全脱离了Servlet容器,而 springmvc是依托着Servlet容器元素来设计的,同时springmvc基于Spring框架,Spring框架想必搞java的同学都很熟 悉. 一进Spring的官网就发现了这样一排醒目的文字, spring可以让我们构造简单的.便携的.又快又易于扩展的基于jvm的系统和应用程序. 没错,基于Spr

使用Spring MVC统一异常处理实战

1 描写叙述 在J2EE项目的开发中.无论是对底层的数据库操作过程.还是业务层的处理过程,还是控制层的处理过程,都不可避免会遇到各种可预知的.不可预知的异常须要处理.每一个过程都单独处理异常,系统的代码耦合度高,工作量大且不好统一.维护的工作量也非常大. 那么,能不能将全部类型的异常处理从各处理过程解耦出来,这样既保证了相关处理过程的功能较单一,也实现了异常信息的统一处理和维护?答案是肯定的. 以下将介绍使用Spring MVC统一处理异常的解决和实现过程. 2 分析 Spring MVC处理异

SpringMVC源码分析系列

说到java的mvc框架,struts2和springmvc想必大家都知道,struts2的设计基本上完全脱离了Servlet容器,而springmvc是依托着Servlet容器元素来设计的,同时springmvc基于Spring框架,Spring框架想必搞java的同学都很熟悉. 一进Spring的官网就发现了这样一排醒目的文字, spring可以让我们构造简单的.便携的.又快又易于扩展的基于jvm的系统和应用程序. 没错,基于Spring的MVC框架SpringMVC同样也可以构造具有这些特