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的异常处理内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Mybatis-Plus自动填充更新操作相关字段的实现

    Mybatis-Plus自动填充更新操作相关字段的实现

    这篇文章主要介绍了Mybatis-Plus自动填充更新操作相关字段的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-12-12
  • Java/Web调用Hadoop进行MapReduce示例代码

    Java/Web调用Hadoop进行MapReduce示例代码

    本篇文章主要介绍了Java/Web调用Hadoop进行MapReduce示例代码,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-11-11
  • 三步轻松实现Java的SM2前端加密后端解密

    三步轻松实现Java的SM2前端加密后端解密

    SM2算法和RSA算法都是公钥密码算法,SM2算法是一种更先进安全的算法,在我们国家商用密码体系中被用来替换RSA算法,这篇文章主要给大家介绍了关于如何通过三步轻松实现Java的SM2前端加密后端解密的相关资料,需要的朋友可以参考下
    2024-01-01
  • javaweb中mysql数据库连接步骤方法及其实例

    javaweb中mysql数据库连接步骤方法及其实例

    这篇文章主要介绍了使用java web 连接MySQL数据库的驱动方法的相关知识,本文介绍的非常详细,具有参考借鉴价值,需要的朋友可以参考下
    2017-04-04
  • 浅析Spring Security登录验证流程源码

    浅析Spring Security登录验证流程源码

    这篇文章主要介绍了Spring Security登录验证流程源码解析,本文结合源码讲解登录验证流程,非常不错,具有一定的参考借鉴价值,需要的朋友可以参考下
    2019-11-11
  • java服务器的简单实现过程记录

    java服务器的简单实现过程记录

    在线浏览网页离不开服务器,用户发出请求request,服务器做出响应response,提供给用户需要的页面,这篇文章主要给大家介绍了关于java服务器简单实现的相关资料,需要的朋友可以参考下
    2021-11-11
  • Spring Boot 基于 SCRAM 认证集成 Kafka 的过程详解

    Spring Boot 基于 SCRAM 认证集成 Kafka 的过程详解

    在本篇文章中,我们将探讨如何在 Spring Boot 应用中集成 Kafka 并使用 SCRAM 认证机制进行安全连接,并实现动态创建账号、ACL 权限、Topic,以及生产者和消费者等操作,感兴趣的朋友跟随小编一起看看吧
    2024-08-08
  • java启动jar包设置启动参数的实现

    java启动jar包设置启动参数的实现

    本文主要介绍了java启动jar包设置启动参数的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-06-06
  • Java C++题解leetcode字符串轮转KMP算法详解

    Java C++题解leetcode字符串轮转KMP算法详解

    这篇文章主要为大家介绍了Java C++题解leetcode字符串轮转KMP算法详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-09-09
  • java实现简单单链表

    java实现简单单链表

    这篇文章主要为大家详细介绍了java实现简单单链表,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-02-02

最新评论