当前位置: 首页 > 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

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 鸿蒙媒体开发【相机数据采集保存】拍照和图片
  • 大模型术语表
  • 24年第五届“华数杯”数学建模竞赛浅析
  • 利用ffmpeg转码视频为gif图片,调整gif图片的大小
  • 全球氢燃料电池汽车市场规划预测:未来六年CAGR为44.4%
  • 前端-防抖代码
  • App推广新利器:Xinstall携带参数安装功能详解
  • FIR低通滤波器
  • 可验证随机函数 vrf 概述
  • Boost:asio网络编程从同步到异步
  • 【C++】函数重载
  • idea个人常用快捷键设置
  • 掌握PyCharm代码格式化秘籍:提升代码质量的终极指南
  • vue3: vuedraggable 的使用方法(正常数据的基本使用与树结构数据递归使用)
  • 【K8S】为什么需要Kubernetes?
  • 【comparator, comparable】小总结
  • 2018一半小结一波
  • HTML中设置input等文本框为不可操作
  • Java多线程(4):使用线程池执行定时任务
  • mysql 数据库四种事务隔离级别
  • Mysql优化
  • Spark RDD学习: aggregate函数
  • Sublime text 3 3103 注册码
  • Vue 2.3、2.4 知识点小结
  • 从0搭建SpringBoot的HelloWorld -- Java版本
  • 力扣(LeetCode)56
  • 前端攻城师
  • 温故知新之javascript面向对象
  • 想晋级高级工程师只知道表面是不够的!Git内部原理介绍
  • 一加3T解锁OEM、刷入TWRP、第三方ROM以及ROOT
  • PostgreSQL 快速给指定表每个字段创建索引 - 1
  • ​比特币大跌的 2 个原因
  • # C++之functional库用法整理
  • ###项目技术发展史
  • #知识分享#笔记#学习方法
  • ()、[]、{}、(())、[[]]命令替换
  • (2)nginx 安装、启停
  • (八)c52学习之旅-中断实验
  • (八)光盘的挂载与解挂、挂载CentOS镜像、rpm安装软件详细学习笔记
  • (代码示例)使用setTimeout来延迟加载JS脚本文件
  • (二)丶RabbitMQ的六大核心
  • (黑马出品_高级篇_01)SpringCloud+RabbitMQ+Docker+Redis+搜索+分布式
  • (排序详解之 堆排序)
  • (顺序)容器的好伴侣 --- 容器适配器
  • (四)汇编语言——简单程序
  • (转)程序员技术练级攻略
  • (转)大型网站架构演变和知识体系
  • .gitignore文件使用
  • .Net Core和.Net Standard直观理解
  • .net程序集学习心得
  • .NET使用存储过程实现对数据库的增删改查
  • /etc/shadow字段详解
  • :not(:first-child)和:not(:last-child)的用法
  • @AutoConfigurationPackage的使用
  • [1]-基于图搜索的路径规划基础