Spring的异常处理@ExceptionHandler注解解析

 更新时间:2023年12月25日 10:30:08   作者:云川之下  
这篇文章主要介绍了Spring的异常处理@ExceptionHandler注解解析,当一个Controller中有方法加了@ExceptionHandler之后,这个Controller其他方法中没有捕获的异常就会以参数的形式传入加了@ExceptionHandler注解的那个方法中,需要的朋友可以参考下

Spring的异常处理

为什么需要对异常进行处理?

假如SpringMvc我们不对异常进行任何处理, 界面上显示的是这样的,假设进行除计算,除数是0会报错.:

在这里插入图片描述

方法一 @ExceptionHandler

当一个Controller中有方法加了@ExceptionHandler之后,这个Controller其他方法中没有捕获的异常就会以参数的形式传入加了@ExceptionHandler注解的那个方法中。

@Controller
@RequestMapping("/testController")
public class TestController {
    @RequestMapping("/demo1")
    @ResponseBody
    public Object demo1(){
       //不需要try {} catch {}
        int i = 1 / 0;
        return new Date();
    }
  //TestController 内的任何异常都会被兜住
    @ExceptionHandler({RuntimeException.class})
    public ModelAndView fix(Exception ex){
        System.out.println("do This");
        return new ModelAndView("error",new ModelMap("ex",ex.getMessage()));
    }
}

注意事项:

  • 一个Controller下多个@ExceptionHandler上的异常类型不能出现一样的,否则运行时抛异常.

Ambiguous @ExceptionHandler method mapped for;

  • @ExceptionHandler下方法返回值类型支持多种,常见的ModelAndView,@ResponseBody注解标

方法返回值可以为:

ModelAndView对象
Model对象
Map对象
View对象
String对象
还有@ResponseBody、HttpEntity<?>或ResponseEntity<?>,以及void

缺点: 几乎所有的Controller都需要进行异常处理,于是每个Controller都需要去写一个方法,不太方便

方法二 @ControllerAdvice+@ExceptionHandler

@ControllerAdvice注解声明一个注解类,这个注解类中的方法的某些注解会应用到所有的Controller里,其中就包括@ExceptionHandler注解。

/**
 * Created by liuruijie on 2016/12/28.
 * 全局异常处理,捕获所有Controller中抛出的异常。
 */
@ControllerAdvice
public class GlobalExceptionHandler {
   //处理自定义的异常
   @ExceptionHandler(SystemException.class) 
   @ResponseBody
   public Object customHandler(SystemException e){
      e.printStackTrace();
      return WebResult.buildResult().status(e.getCode()).msg(e.getMessage());
   }
   //其他未处理的异常
   @ExceptionHandler(Exception.class)
   @ResponseBody
   public Object exceptionHandler(Exception e){
      e.printStackTrace();
      return WebResult.buildResult().status(Config.FAIL).msg("系统错误");
   }
}

到此这篇关于Spring的异常处理@ExceptionHandler注解解析的文章就介绍到这了,更多相关Spring的异常处理内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • java实现附件预览(openoffice+swftools+flexpaper)实例

    java实现附件预览(openoffice+swftools+flexpaper)实例

    本篇文章主要介绍了java实现附件预览(openoffice+swftools+flexpaper)实例,具有一定的参考价值,感兴趣的小伙伴们可以参考一下。
    2016-10-10
  • 基于JDK动态代理原理解析

    基于JDK动态代理原理解析

    这篇文章主要介绍了基于JDK动态代理原理解析,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-05-05
  • Java实现添加文字水印和图片水印功能

    Java实现添加文字水印和图片水印功能

    为图片添加水印是一种常用的图片处理技术,本文主要介绍了Java实现添加文字水印和图片水印功能,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-05-05
  • SpringBoot高效实现API限流的多种方法实战

    SpringBoot高效实现API限流的多种方法实战

    本文介绍了在SpringBoot项目中实现限流的多种方法,包括使用Guava库的GuavaRateLimiter、基于Redis的分布式限流、Resilience4j限流器以及通过自定义过滤器实现API限流,感兴趣的可以了解一下
    2026-01-01
  • Java Web程序中利用Spring框架返回JSON格式的日期

    Java Web程序中利用Spring框架返回JSON格式的日期

    这里我们来介绍一下Java Web程序中利用Spring框架返回JSON格式的日期的方法,前提注意使用@DatetimeFormat时要引入一个类库joda-time-版本.jar,否则会无法访问相应路径
    2016-05-05
  • Nacos服务注册与发现原理解读

    Nacos服务注册与发现原理解读

    Nacos是阿里巴巴开源的微服务组件,支持服务注册、发现及配置管理,采用客户端心跳维护、服务端推送与长轮询同步,结合健康检查机制,实现高效可靠的微服务治理
    2025-08-08
  • SpringBoot实现系统监控的完整示例

    SpringBoot实现系统监控的完整示例

    本文介绍了如何对SpringBoot应用进行系统监控,包括监控的重要性、详细步骤以及最佳实践,监控可以帮助我们预防问题、快速定位和解决,提升系统性能和开发体验,需要的朋友可以参考下
    2025-12-12
  • idea Gradle 控制台中文乱码的解决

    idea Gradle 控制台中文乱码的解决

    通过IDEA执行gradle的任务时,在终端的输出出现中文乱码,本文主要介绍了idea Gradle 控制台中文乱码的解决,具有一定的参考价值,感兴趣的可以了解一下
    2024-03-03
  • springboot如何整合elasticsearch

    springboot如何整合elasticsearch

    这篇文章主要介绍了springboot如何整合elasticsearch问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-04-04
  • java身份证合法性校验工具类实例代码

    java身份证合法性校验工具类实例代码

    这篇文章主要给大家介绍了关于java身份证合法性校验工具类的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-09-09

最新评论