spring怎么识别拦截器 异常处理器

devtools/2024/9/24 1:56:19/

Spring框架中识别和调用拦截器(Interceptor)和异常处理器(HandlerExceptionResolver)是通过容器内部的组件扫描和自动装配机制来完成的。

拦截器(Interceptor):

Spring MVC 的拦截器必须实现 HandlerInterceptor 接口。你可以定义一个拦截器类,然后将其注册为Spring的Bean。

java">import org.springframework.web.servlet.HandlerInterceptor;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;public class MyInterceptor implements HandlerInterceptor {@Overridepublic boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) {// 在请求处理之前进行调用return true; // 如果返回false,则停止流程,api不会被调用}@Overridepublic void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) {// 请求处理之后进行调用,但是在视图被渲染之前}@Overridepublic void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) {// 在整个请求结束之后调用,也就是在DispatcherServlet渲染了视图执行}
}

然后在Spring配置中注册这个拦截器:

java">import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;@Configuration
public class WebConfig implements WebMvcConfigurer {@Overridepublic void addInterceptors(InterceptorRegistry registry) {registry.addInterceptor(new MyInterceptor());}
}

异常处理器(HandlerExceptionResolver)

:

异常处理器可以通过实现 HandlerExceptionResolver 接口来创建

java">import org.springframework.core.Ordered;
import org.springframework.core.annotation.Order;
import org.springframework.web.servlet.HandlerExceptionResolver;
import org.springframework.web.servlet.ModelAndView;import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;@Order(value=1)
public class MyHandlerExceptionResolver implements HandlerExceptionResolver, Ordered {@Overridepublic ModelAndView resolveException(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) {// 在这里处理异常,创建一个包含错误信息的ModelAndViewreturn new ModelAndView("error");}@Overridepublic int getOrder() {return 1;}
}

Spring会自动扫描标注了@Component的类,如果这个类实现了HandlerExceptionResolver接口,那么它会被注册为异常处理器。

或者,你也可以在配置类中显式注册异常处理器

java">import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;@Configuration
public class WebConfig {@Beanpublic HandlerExceptionResolver handlerExceptionResolver() {return new MyHandlerExceptionResolver();}
}

以上代码展示了如何定义和注册Spring MVC的拦截器和异常处理器。Spring会在启动时自动发现并应用这些配置。


http://www.ppmy.cn/devtools/116263.html

相关文章

Spring Boot-应用启动问题

在使用 Spring Boot 进行开发时,应用启动问题是开发人员经常遇到的挑战之一。通过有效排查和解决这些问题,可以提高应用的稳定性和可靠性。 1. Spring Boot 启动问题的常见表现 Spring Boot 应用启动失败通常表现为以下几种情况: 应用启动…

QT----基于QML的计时器

赶上了实习的末班车,现在在做QML开发,第一天的学习成果,一个计时器.逻辑挺简单的,纯QML实现,代码在仓库QT-Timer 多线程优化 在使用的过程中发现自己的计时器时间会慢,并且一直点击记录的话时间1s可以走10s,排查发现是在计时器的间隔取得太小了,取了1太过于消耗资源,改成10的…

【QT基础】创建项目项目代码解释

目录 前言一,使⽤Qt Creator 新建项目1. 新建项目2. 选择项⽬模板3. 选择项⽬路径4. 选择构建系统5. 填写类信息设置界⾯6. 选择语⾔和翻译⽂件7. 选择Qt套件8. 选择版本控制系统9. 最终效果 二,项目代码说明1. main.cpp文件2. Widget.h文件3. Widget.cp…

大数据系统调优:从DAG到单机

目标:优化T10的时效性全局DAG调度层优化:提前任务开始时间: 1. 优化慢结点:T10依赖了T4,T7,T8, 其中T8为瓶颈,如果T8能提前点完成,T10可以早点开始,就能早点完成 2. 快结点做更多预计算…

数据库_解决SQL Server数据库log日志过大,清理日志文件方法

SQL Server数据库日志文件过大的原因主要有几个方面: 事务日志记录了所有对数据库进行修改的操作,如插入、更新和删除,这些操作会不断增加日志文件的大小。 长时间运行且未正确结束的事务会持续占用事务日志中的空间,导致日志文…

Kubernets基础-包管理工具Helm详解

文章目录 什么是Helm?Helm 的基本概念Helm 的工作原理Helm 的主要功能使用 Helm 的步骤 values.yaml和Chart.yamlvalues.yaml 文件示例Chart.yaml 文件示例 什么是Helm? Helm 是 Kubernetes 的一个非常流行的包管理工具,它使得在 Kubernetes 上部署应用程序变得更…

医学数据分析实训 项目三 关联规则分析预备项目---购物车分析

文章目录 1 预备项目关联规则分析实践———购物车分析1 产生频繁集2 产生关联规则 1 预备项目 关联规则分析实践———购物车分析 import warnings import numpy as np import pandas as pd from mlxtend.frequent_patterns import apriori from mlxtend.frequent_patterns …

【Git】初识Git

本篇文章的环境是在 Ubuntu/Linux 环境下编写的 文章目录 版本控制器Git 基本操作安装 Git创建 Git 本地仓库配置 Git认识工作区、暂存区、版本库添加文件修改文件版本回退撤销修改删除文件 版本控制器 在日常工作和学习中,老板/老师要求我们修改文档,…