当前位置: 首页 > news >正文

《零散知识点 · 自定义 HandleMapping》

📢 大家好,我是 【战神刘玉栋】,有10多年的研发经验,致力于前后端技术栈的知识沉淀和传播。 💗
🌻 CSDN入驻不久,希望大家多多支持,后续会继续提升文章质量,绝不滥竽充数,欢迎多多交流。👍

文章目录

      • 写在前面的话
      • 实现步骤
      • 示例代码
      • 常见场景
      • 注意事项
      • 总结陈词

CSDN.gif

写在前面的话

在 Spring MVC 中,自定义 HandlerMapping 可以用来定义请求路径与处理器(控制器)之间的映射规则。虽然 Spring 提供了诸如 RequestMappingHandlerMapping 和 SimpleUrlHandlerMapping 等默认实现,但在某些特殊场景下,可能需要自定义 HandlerMapping 以满足特定需求。

实现步骤

Step1、实现 HandlerMapping 接口
实现 HandlerMapping 接口或者继承其实现类,并实现 getHandler 方法。getHandler 方法用于返回与当前请求匹配的处理器。
Step2、注册自定义 HandlerMapping
在 Spring 配置中注册自定义的 HandlerMapping,使其参与到处理流程中。

示例代码

以下是一个简单的自定义 HandlerMapping 示例,它将所有以 /custom/* 开头的 URL 映射到一个特定的处理器:

import org.springframework.web.servlet.HandlerMapping;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.Controller;import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;public class CustomHandlerMapping implements HandlerMapping {@Overridepublic Object getHandler(HttpServletRequest request) throws Exception {String uri = request.getRequestURI();if (uri.startsWith("/custom/")) {return new CustomController();}return null;}private static class CustomController implements Controller {@Overridepublic ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response) throws Exception {response.getWriter().write("Handled by custom controller");return null;}}
}

在 Spring 配置文件(如 applicationContext.xml 或 Java 配置类)中注册自定义 HandlerMapping:

<bean id="customHandlerMapping" class="com.example.CustomHandlerMapping"/>

或者添加配置文件:

@Configuration
public class WebConfig implements WebMvcConfigurer {@Beanpublic HandlerMapping customHandlerMapping() {return new CustomHandlerMapping();}
}

常见场景

动态路由:当处理器的路由规则较为复杂或动态变化时,使用自定义 HandlerMapping 可以动态地分配请求。
多租户系统:根据不同租户的请求头或路径信息,将请求路由到不同的处理器。
自定义 URL 模式:当默认的 URL 映射策略无法满足业务需求时,例如需要基于数据库配置的 URL 模式。
特殊权限控制:可以基于请求路径的特殊前缀或参数,结合自定义 HandlerMapping 实现特殊权限控制。
跨模块请求分发:在一个大型系统中,可以通过自定义 HandlerMapping 实现跨模块的请求分发。

注意事项

1、自定义 HandlerMapping 的优先级问题。Spring MVC 会按照定义的顺序查找 HandlerMapping,因此自定义的 HandlerMapping 可能需要设置较高的优先级。
2、实现 HandlerMapping 时,确保线程安全,因为它会在多个请求中共享同一个实例。
3、处理器返回的对象应实现特定的接口,如 Controller 或包含 @RequestMapping 注解的类。

总结陈词

一般情况下,较少场景会自定义这个,偏底层一些。
要自定义的话,需要保障熟悉 SpringMVC 流程。

CSDN_END.gif

相关文章:

《零散知识点 · 自定义 HandleMapping》

&#x1f4e2; 大家好&#xff0c;我是 【战神刘玉栋】&#xff0c;有10多年的研发经验&#xff0c;致力于前后端技术栈的知识沉淀和传播。 &#x1f497; &#x1f33b; CSDN入驻不久&#xff0c;希望大家多多支持&#xff0c;后续会继续提升文章质量&#xff0c;绝不滥竽充数…...

谈谈我对微服务的理解2.0

文章目录 一、引出问题二、微服务2-1、微服务的技术2-2、微服务的目的 三、微服务的拆分四、不连表查询五、微服务的好处六、微服务的坏处七、应付当下 这篇文章原本叫《如何做到不连表查询》&#xff0c;因为我对这个事一直耿耿于怀。在上家公司我经常被连表折磨&#xff08;连…...

ECCV 2024前沿科技速递:GLARE-基于生成潜在特征的码本检索点亮低光世界,低光环境也能拍出明亮大片!

在计算机视觉与图像处理领域&#xff0c;低光照条件下的图像增强一直是一个极具挑战性的难题。暗淡的光线不仅限制了图像的细节表现&#xff0c;还常常引入噪声和失真&#xff0c;极大地影响了图像的质量和可用性。然而&#xff0c;随着ECCV 2024&#xff08;欧洲计算机视觉会议…...

前端低代码必备:FrontendBlocks 4.0版本重磅发布,助力Uniapp-X原生APP开发

项目介绍 本软件是一款强大的所见即所得前端页面设计器&#xff0c;是低代码开发领域的基础设施&#xff0c;生成的代码不依赖于任何框架&#xff0c;实测可以将前端布局工作的耗时减少80%以上&#xff0c;最关键的是&#xff0c;它实现了人人都可以写前端页面的梦想。 不用写…...

如何将PyCharm 中使用 PDM 管理的 Django 项目迁移到 VS Code 并确保一切正常工作?

嗨&#xff0c;我是兰若姐姐&#xff0c;相信很多小伙伴都遇到过这种情况&#xff0c;使用pycharm用习惯了&#xff0c;想换个编辑器&#xff0c;比如换成vscode&#xff0c;今天就告诉大家&#xff0c;如果轻松切换到vscode 步骤 1&#xff1a;在 VS Code 中打开项目 打开 V…...

认识Android Handler

“Android Handler” 通常指的是 Android 开发中的 Handler 类&#xff0c;它是 Android SDK 的一部分&#xff0c;用于管理消息队列和线程之间的通信。它在 Android 开发中非常有用&#xff0c;特别是在计划消息和可运行对象&#xff08;Runnables&#xff09;在未来某个时间点…...

如何在 Ubuntu VPS 上安装 Cassandra 并运行单节点集群

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到网站。 介绍 Cassandra&#xff0c;或者说 Apache Cassandra&#xff0c;是一个高度可扩展的开源数据库系统&#xff0c;在多节点设置上能够实…...

Golang | Leetcode Golang题解之第316题去除重复字母

题目&#xff1a; 题解&#xff1a; func removeDuplicateLetters(s string) string {left : [26]int{}for _, ch : range s {left[ch-a]}stack : []byte{}inStack : [26]bool{}for i : range s {ch : s[i]if !inStack[ch-a] {for len(stack) > 0 && ch < stack…...

pxe的实验

首先搭好实验环境、 如果没有安装好图形&#xff0c;则需要用yum groups list找到有“GUI”的然后用yum groups " " 把含有GUI的复制到双引号里安装 然后再执行init 5 打开图形 Kickstart 如果dnf用不了改成yum 然后在用yum install httpd -y 安装好http的软件 之后…...

复杂智能软件系统开发

软件开发技术总是伴随着计算技术的时代问题向前发展,随着智能计算时代的到来,软件界需要回应智能软件开发的问题。 大型机时代,软件开发的主要问题是软件开发的效率和质量问题,用机器指令或汇编语言编写软件,效率低、质量差。随着高级程序设计语言的出现及其自动编译技术…...

kickstart自动安装脚本

当安装Linux操作系统时&#xff0c;安装过程会需要回答很多关于设定的问题 这些问题必须手动选择&#xff0c;否则无法进行安装。当只安装1台Linux系统&#xff0c;手动选择设定工作量比较轻松&#xff0c;当安装多台Linux&#xff0c;这些设定需要重复多次&#xff0c;这些重复…...

linux运维一天一个shell命令之grep详解

一、概念 grep 是 Linux 和 Unix 系统中一个非常常用的命令行工具&#xff0c;用于搜索文本文件中的特定模式。它支持正则表达式&#xff0c;并能在文件中快速查找匹配的行 二、正则表达式 1.概念 正则表达式&#xff08;Regular Expressions&#xff0c;简称 regex 或 reg…...

COMSOL金属氢化物-放氢过程

在此记录下放氢过程的软件设置思路 1、采用的是"达西定律""层流" 物理场&#xff0c;其中"层流"物理场选择了”弱可压缩流动“&#xff0c;这里主要是选择”可压缩流动“的话&#xff0c;算出来的瞬时流量值跟实测差距太大了。 2、设置"达西…...

(四)软件性能测试

1. 性能测试包含的方法有哪些&#xff08;至少列举5种&#xff09;&#xff1f; 正确回答通过率&#xff1a;69.0%[ 详情 ] 推荐指数&#xff1a; ★★★★★ 试题难度&#xff1a; 中级 性能测试大致分为以下六类 1、验收性能测试&#xff1a; 通过模拟生产运行的业务压力量…...

萱仔大模型学习记录5-langchain实战

前面我的bertlora微调已经跑出了不错的结果&#xff0c;我也学会了如何在bert上使用Lora进行微调&#xff0c;我后续会补充一个医疗意图识别的项目于这个系列&#xff0c;现在这个医疗意图识别代码还暂时不准备公开。我就继续按照我的计划学习一番LangChain。 LangChain是一个用…...

安装使用netron

1.安装netron pip install netron2.使用以下命令,然后打开浏览器查看。 netron netron --host 0.0.0.0 --port 6780 netron "model_path" --host 0.0.0.0 --port 67803.在jupyterlab中使用 github有人推荐的方法&#xff0c;jupyterlab部署在本地的可以用…...

JDFrame 一款比 Java 8 Stream 更灵活的数据处理工具

一、JDFrame 介绍 在大数据处理领域&#xff0c;Apache Spark以其强大的分布式计算能力和丰富的数据处理API而广受好评。然而&#xff0c;在许多日常的软件开发场景中&#xff0c;我们面临的数据量可能并不需要Spark这样的分布式系统来处理。相反&#xff0c;我们更希望有一种…...

《Android系统开发中高级定制专栏导读》

《Android系统开发中高级定制专栏导读》 欢迎来到【Android系统开发中高级定制‘】专栏&#xff01;在这里&#xff0c;将深入探讨Android系统开发与定制的方方面面&#xff0c;涵盖从系统接口定制、权限管理、系统应用配置、驱动入门配置等多个领域。无论你是刚接触Android系…...

LeetCode 114. 二叉树展开为链表

更多题解尽在 https://sugar.matrixlab.dev/algorithm 每日更新。 组队打卡&#xff0c;更多解法等你一起来参与哦&#xff01; LeetCode 114. 二叉树展开为链表&#xff0c;难度中等。 DFS 解题思路&#xff1a;先用 DFS 遍历二叉树&#xff0c;将树的结果存放在 List 中&am…...

78.子集

给你一个整数数组 nums &#xff0c;数组中的元素 互不相同 。返回该数组所有可能的子集&#xff08;幂集&#xff09;。 解集 不能 包含重复的子集。你可以按 任意顺序 返回解集。 &#xff1a;总 // 注释的都为后来思考不必要的 class Solution {List<List<Integer…...

CVPR 2025 MIMO: 支持视觉指代和像素grounding 的医学视觉语言模型

CVPR 2025 | MIMO&#xff1a;支持视觉指代和像素对齐的医学视觉语言模型 论文信息 标题&#xff1a;MIMO: A medical vision language model with visual referring multimodal input and pixel grounding multimodal output作者&#xff1a;Yanyuan Chen, Dexuan Xu, Yu Hu…...

Java 语言特性(面试系列1)

一、面向对象编程 1. 封装&#xff08;Encapsulation&#xff09; 定义&#xff1a;将数据&#xff08;属性&#xff09;和操作数据的方法绑定在一起&#xff0c;通过访问控制符&#xff08;private、protected、public&#xff09;隐藏内部实现细节。示例&#xff1a; public …...

Vue3 + Element Plus + TypeScript中el-transfer穿梭框组件使用详解及示例

使用详解 Element Plus 的 el-transfer 组件是一个强大的穿梭框组件&#xff0c;常用于在两个集合之间进行数据转移&#xff0c;如权限分配、数据选择等场景。下面我将详细介绍其用法并提供一个完整示例。 核心特性与用法 基本属性 v-model&#xff1a;绑定右侧列表的值&…...

定时器任务——若依源码分析

分析util包下面的工具类schedule utils&#xff1a; ScheduleUtils 是若依中用于与 Quartz 框架交互的工具类&#xff0c;封装了定时任务的 创建、更新、暂停、删除等核心逻辑。 createScheduleJob createScheduleJob 用于将任务注册到 Quartz&#xff0c;先构建任务的 JobD…...

新能源汽车智慧充电桩管理方案:新能源充电桩散热问题及消防安全监管方案

随着新能源汽车的快速普及&#xff0c;充电桩作为核心配套设施&#xff0c;其安全性与可靠性备受关注。然而&#xff0c;在高温、高负荷运行环境下&#xff0c;充电桩的散热问题与消防安全隐患日益凸显&#xff0c;成为制约行业发展的关键瓶颈。 如何通过智慧化管理手段优化散…...

【Java_EE】Spring MVC

目录 Spring Web MVC ​编辑注解 RestController RequestMapping RequestParam RequestParam RequestBody PathVariable RequestPart 参数传递 注意事项 ​编辑参数重命名 RequestParam ​编辑​编辑传递集合 RequestParam 传递JSON数据 ​编辑RequestBody ​…...

用docker来安装部署freeswitch记录

今天刚才测试一个callcenter的项目&#xff0c;所以尝试安装freeswitch 1、使用轩辕镜像 - 中国开发者首选的专业 Docker 镜像加速服务平台 编辑下面/etc/docker/daemon.json文件为 {"registry-mirrors": ["https://docker.xuanyuan.me"] }同时可以进入轩…...

Java多线程实现之Thread类深度解析

Java多线程实现之Thread类深度解析 一、多线程基础概念1.1 什么是线程1.2 多线程的优势1.3 Java多线程模型 二、Thread类的基本结构与构造函数2.1 Thread类的继承关系2.2 构造函数 三、创建和启动线程3.1 继承Thread类创建线程3.2 实现Runnable接口创建线程 四、Thread类的核心…...

C# 求圆面积的程序(Program to find area of a circle)

给定半径r&#xff0c;求圆的面积。圆的面积应精确到小数点后5位。 例子&#xff1a; 输入&#xff1a;r 5 输出&#xff1a;78.53982 解释&#xff1a;由于面积 PI * r * r 3.14159265358979323846 * 5 * 5 78.53982&#xff0c;因为我们只保留小数点后 5 位数字。 输…...

Redis的发布订阅模式与专业的 MQ(如 Kafka, RabbitMQ)相比,优缺点是什么?适用于哪些场景?

Redis 的发布订阅&#xff08;Pub/Sub&#xff09;模式与专业的 MQ&#xff08;Message Queue&#xff09;如 Kafka、RabbitMQ 进行比较&#xff0c;核心的权衡点在于&#xff1a;简单与速度 vs. 可靠与功能。 下面我们详细展开对比。 Redis Pub/Sub 的核心特点 它是一个发后…...