Spring Boot系列十 Spring MVC全局异常处理总结

本文介绍了Spring Boot中Spring MVC的全局异常处理,包括通过注解@ControllerAdvice+@ExceptionHandler和@Controller+@ExceptionHandler捕获异常,以及自定义HandlerExceptionResolver的方式。详细展示了如何返回modelAndView、页面地址、JSON和http错误码。
摘要由CSDN通过智能技术生成

1. 概述

SpringMVC 提供的异常处理主要有两种方式:

  • 一种是直接实现自己的HandlerExceptionResolver
  • 一种是使用注解

通过注解的方式实现处理异常主要有以下两种方式:

  • 1 @ControllerAdvice+@ExceptionHandler:配置对全局异常进行处理
  • 2 @Controller + @ExceptionHandler:配置对当前所在Controller的异常进行处理

在SpringMVC中,处理异常类实际上是HandlerExceptionResolver子类。HandlerExceptionResolver处理所有controller类在执行过程中抛出的未被处理的异常。

本文演示如何使用以上多种处理异常的方式,最后演示以不同的方式将异常结果返回给调用者

  • 返回 modelAndView
  • 返回一个页面的地址
  • 返回 JSON
  • 返回 http 错误码

2. 演示工程mvc

所有代码都中mvc工程中

3.1. 基础类和JSP页面

辅助类
EmployeeEx:POJO类
ExceptionJSONInfo:封装返回的JSON对象


public class EmployeeEx {
    private String name;
    private int id;
    …
}

public class ExceptionJSONInfo {
    private String url;
    private String message;
    …
}

定义测试的异常类
EmployeeExNotFoundException

public class EmployeeExNotFoundException extends Exception {
   

  private static final long serialVersionUID = -3332292346834265371L;

  public EmployeeExNotFoundException(int id){
    super("EmployeeNotFoundException with id="+id);
  }
}

EmployeeExJsonException

public class EmployeeExJsonException extends Exception {
   

  private static final long serialVersionUID = -3332292346834265371L;

  public EmployeeExJsonException(int id){
    super("EmployeeExJsonException with id="+id);
  }
}

JSP页面
本demo使用的jsp都在此“META-INF.resources.WEB-INF.page.exceptionhandling”目录下,由于代码简单,这里一一列出。

3. 通过注解的方式捕获异常

本节演示两种通过注解捕获异常的方式
- @Controller + @ExceptionHandler
- @ControllerAdvice + @ExceptionHandler

3.1. @Controller + @ExceptionHandler

@Controller:注解此类是Controller类
@ExceptionHandler:此注解注解到类的方法上,当此注解里定义的异常抛出时,此方法会被执行。如果@ExceptionHandler所在的类是@Controller,则此方法只作用在此类。如果@ExceptionHandler所在的类是@ControllerAdvice,则此方法会作用在全局。本节演示前种用法

下面演示这种用法:

EmployeeExController:

  • 在@Controller里定义的@ExceptionHandler只截获所在类抛出的异常
  • handleEmployeeNotFoundException()通过@ExceptionHandler定义要捕获的异常是EmployeeExNotFoundExc
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值