每天学点SpringMVC-异常处理

1. 第一步先写个Hello World

1.1 编写一个抛出异常的目标方法

 @RequestMapping("/testException.do")
    public String testException(){
        int i = 1 / 0 ;
        return "index" ;
    }

1.2 当前Controller中添加@ExceptionHandler标记方法

@ExceptionHandler(value = {ArithmeticException.class})
    public ModelAndView handleArithException(Exception ex){
        ModelAndView mv = new ModelAndView("error") ;
        mv.addObject("ex",ex) ;
        return mv ;
    }

 1.3 加上error界面

1.4 测试结果

1.5 总结一下

1)@ExceptionHandler标记的方法在目标方法发生对应的异常触发,传入的参数Exception即为对应的异常对象

2)不能通过参数中添加Map的形式将异常对象传递的界面,需要用ModelAndView的形式实现

3)优先级:优先在当前Controller中@ExceptionHandler标记的方法,如果有多个,谁标记的异常越接近,则选择谁,如果当前Controller没有匹配到,则在@ControllerAdvice标记的类中找@ExceptionHandler标记的方法

2. @ResponseStatus注解能够实现目标异常产生时,反馈给client端指定的状态码跟信息

2.1 构建目标异常并添加@ResponseStatus注解

@ResponseStatus(value = HttpStatus.FORBIDDEN,reason = "test")
public class TestException extends RuntimeException {
}

2.2 构建测试RequestMapper

 @RequestMapping("/testResponseStatus.do")
    public String testResponseStatus(){
        throw new TestException() ;
    }

2.3 测试结果如下

2.4 如果指定异常被ExceptionHandler捕获时,发生什么?

1)在上述ExceptionHandler中添加TextException

2)重新部署测试结果

3. 可通过spring-mvc.xml配置ExceptionResolver实现指定异常发送跳转到指定页面

3.1 定义指定异常

public class TestDefaultException extends RuntimeException {
}

3.2 spring-mvc.xml中进行配置

<bean class="org.springframework.web.servlet.handler.SimpleMappingExceptionResolver">
        <property name="defaultErrorView" value="error"></property>
        <property name="exceptionAttribute" value="ex"/>
        <property name="exceptionMappings">
            <props>
                <prop key="com.pawn.crud.exceptions.TestDefaultException">error</prop>
            </props>
        </property>
    </bean>

3.3 测试

@RequestMapping("/testDefaultException.do")
    public String testDefaultException(){
        throw new TestDefaultException() ;
    }

3.4 有个小坑:指定的异常不能加@ResponseStatus注解,否则配置的ExceptionResolver会失效

demo:https://github.com/705645051/demoCrud

时间: 2024-08-30 00:12:12

每天学点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——异常处理

Spring MVC 通过 HandlerExceptionResolver 处理程序的异常,包括 Handler 映射.数据绑定以及目标方法执行时发生的异常. SpringMVC 提供的 HandlerExceptionResolver 的实现类 <mvc:annotation-driven/>在容器中注册org.springframework.web.servlet.mvc.method.annotation.ExceptionHandlerExceptionResolver Except

零基础学Python--------第9章 异常处理及程序调试

第9章 异常处理及程序调试 9.1 异常概述 在程序运行过程中,经常会遇到各种各样的错误,这些错误统称为“异常”.这些异常有的是由于开发者将关键字敲错导致的,这类错误多数产生的是SyntaxError:invalid syntax(无效的语法),这将直接导致程序不能运行.这类异常是显式的,在开发阶段很容易被发现.还有一类是隐式的,通常和使用者的操作有关. 实例01:模拟幼儿园分苹果 def division(): '''功能:分苹果''' print("\n===================

【边做项目边学Android】异常处理:android.os.NetworkOnMainThreadException--多线程问题

一切搞定.以为高枕无忧了,结果还是有问题! log開始报错了,获取更新信息异常..!debug一下.发现Exception:android.os.NetworkOnMainThreadException 这个异常大概意思是在主线程訪问网络时出的异常. Android在4.0之前的版本号 支持在主线程中訪问网络.可是在4.0以后对这部分程序进行了优化,也就是说訪问网络的代码不能写在主线程中了. 查看网上的解决方法.在Android中实现异步任务机制有两种方式,Handler和AsyncTask.

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,Spring,Hibernate,Mybatis架构开发搭建之SpringMVC部分

辞职待业青年就是有很多时间来写博客,以前在传统行业技术强度相对不大,不处理大数据,也不弄高并发的,所以学不到什么高端编程技术和架构方法,那么我自己就琢磨搞一个SSH架构的东西出来,希望可以帮助到一些朋友,也希望大拿给出相应的指导意见. 先从用了什么东西说起吧 SSHM=SpringMVC+Spring+Hibernate+Mybatis,至于为什么要这么搞,我先简要的说下. SpringMVC 我最初的想法就是,它比struts2小,属于轻量级的MVC框架,而且和spring可以完美结合在一起.