首页 > 其他分享 >全局异常处理机制与拦截器

全局异常处理机制与拦截器

时间:2023-09-19 17:46:50浏览次数:31  
标签:Exception 拦截器 return RequestMapping param public handler 全局 机制

全局异常处理机制

/**
 * 全局异常处理器
 * 应用到所有@RequestMapping注解的方法,在其抛出Exception异常时执行
 */
//@ControllerAdvice  //可以返回逻辑视图 转发和重定向的!
@RestControllerAdvice //直接返回json字符串
public class GlobalException {

    /*发生异常 -》 查看异常类型 @ExceptionHandler(指定的异常) -> 对应异常处理方法 handler
      指定的异常 可以精准查找,或者查找父异常!*/

    @ExceptionHandler(NullPointerException.class) //指定异常处理方法
    public Object nullPoing(NullPointerException e){
        String message = e.getMessage();
        return message;
    }
    @ExceptionHandler(Exception.class) //指定异常处理方法
    public Object allException(Exception e){
        String message = e.getMessage();
        return message;
    }
}
实例
@RestController
@RequestMapping("error")
public class TestException {

    @RequestMapping("e1")
    public String nullException(){
    String g=null;
    return g.toString();
    }

    @RequestMapping("e2")
    public Object exception(){
        int i=5/0;
        return i;
    }
}

拦截器

//springmvc 拦截器  实现接口HandlerInterceptor  自定义处理
public class MyInterceptor implements HandlerInterceptor {

    /**
     * 执行handler之前!调用的拦截方法!  编码格式设置。登录保护。权限处理!!
     * @param request 请求
     * @param response 响应
     * @param handler 要调用的方法对象
     * @return  true 放行  false拦截
     * @throws Exception
     */
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        System.out.println("MyInterceptor.preHandle");
        return true;
    }

    /** 当handler执行完毕后。触发的方法! 没有拦截机制
     *  此方法只有 preHandler return true 触发
     * 对结果处理! 敏感词汇检查!!
     * @param request 请求
     * @param response 响应
     * @param handler 要执行的方法
     * @param modelAndView 返回的视图和共享域数据对象
     * @throws Exception
     */
    @Override
    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
        System.out.println("MyInterceptor.postHandle");
    }


    /**整体处理完毕 执行
     *
     * @param request
     * @param response
     * @param handler
     * @param ex  handler方法 报错 的异常对象
     * @throws Exception
     */
    @Override
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
        System.out.println("MyInterceptor.afterCompletion");
    }
}

体验

@RestController
@RequestMapping("test")
public class InterceptorTest {

    @RequestMapping("e1")
    public String nullException(){
        System.out.println("InterceptorTest.nullException");
        return "e1";
    }

    @RequestMapping("e2")
    public int exception(){
        System.out.println("InterceptorTest.exception");
        return 1;
    }
    @RequestMapping("e3")
    public void test(){
        System.out.println("InterceptorTest.test");
    }
}

标签:Exception,拦截器,return,RequestMapping,param,public,handler,全局,机制
From: https://www.cnblogs.com/weifengfuxiufa/p/17715291.html

相关文章

  • Gradle 设置全局镜像源
    复制init.gradle.kts文件到Windows的%USERPROFILE%/.gradle或者Linux的~/.gradle目录下。也可以直接复制文末的代码为init.gradle.kts。Gradle不支持镜像源的直接设置,只能通过maven()方法设置一个新的Maven仓库地址。在init.gradle中调用maven()会导致镜......
  • 拦截器
    拦截器拦截器概述SpringMVC的处理器拦截器,类似于Servlet开发中的过滤器Filter,用于对处理器进行预处理和后处理。过滤器和拦截器区别过滤器:依赖于servlet容器。在实现上基于函数回调,可以对几乎所有请求进行过滤,但是缺点是一个过滤器实例只能在容器初始化时调用一次。使用过......
  • 自定义全局反序列化器
    以处理LocalDateTime格式的全局反序列化器为例,全局序列化器类似1、全局反序列化器代码importcom.fasterxml.jackson.annotation.JsonFormat;importcom.fasterxml.jackson.core.JsonParser;importcom.fasterxml.jackson.core.JsonProcessingException;importcom.fasterxml......
  • 云HIS医院信息化管理系统源码:集团化管理,多租户机制,满足医院业务需求
    随着云计算、大数据、物联网等新兴技术的迅猛发展,HIS模式的理念、运行机制更新,衍生出了新的HIS模式——云HIS。云HIS是基于云计算、大数据、互联网等高新技术研发的医疗卫生信息平台,它实现了医院信息化从局域网向互联网转型,并重新定义了医疗卫生信息化建设的理念、框架、功能以及运......
  • 注意力机制
     加速计算(效果不一定好)->CNN   如何做选择,可以不同head做不同选择。  CNN中注意力的获取SENet的核心思想在于通过网络根据损失函数值loss去学习特征权重,使得对于任务更为效果明显的特征图权重变大,无效果或效果不明显的特征图权重变小的方式来训练模型从......
  • 深入理解操作系统中进程与线程的区别及切换机制(上)
    进程所谓进程,大家可以理解为我们打开的应用程序,如微信、QQ、游戏等,但也有系统应用是我们看不见的,可以打开任务管理器一探究竟,我们写的代码程序在服务器上在不运行的情况下,它就是一个二进制文件,并不是进程!一个进程可以包含一个或者多个线程,但对于CPU来说他就是一个任务而已;在早......
  • 深入理解操作系统中进程与线程的区别及切换机制(下)
    前言上一篇文章中我们了解了进程的执行方式,包括早期单核处理器上的顺序执行以及引入多任务概念实现的伪并行。我们还探讨了进程的状态模型。进程可以处于就绪、运行、阻塞和结束等不同的状态。在本篇文章中,我将探讨研究进程的状态模型、控制结构和切换机制。希望通过这篇文章的分......
  • KingbaseESV8R6全局临时表不能进行reindex操作
    背景我们经常遇到两种情况下会重建索引,reindex1、索引崩溃,由于软件或硬件问题导致索引内数据失效而不可用。2、索引膨胀,当索引膨胀会占用过多磁盘空间,reindex可以解决此问题。对于临时表和全局临时表而言,临时表可以进行reindex操作,而全局临时表不能进行此操作,原因是全局临时表......
  • vue 自定义全局弹窗组件
    问题描述:vue自定义类似elementUI的this.$confirm解决方案:通过vue的extend方法实现然后全局注入 代码实现: 展示的组件(就是最基本的vue组件代码)<!--*@Author:linchunlinchun*@Date:2023-09-1810:14:24*@LastEditors:linchunlinchun*@LastEdit......
  • 平衡二叉树的平衡机制
    1.什么是平衡二叉树,就是任意节点的左右子树的层数之差不超过1.前提它是一个二叉树。 2.一个平衡二叉树,在以下4种情况下,会破坏平衡(为啥要知道4种基本的情况,因为跟左旋和右旋的息息相关)。 2.1根节点--->左子树--->左子节点。增加节点操作。简称左左。 2.2根节点--->左子树-......