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

http://www.lryc.cn/news/414821.html

相关文章:

  • 谈谈我对微服务的理解2.0
  • ECCV 2024前沿科技速递:GLARE-基于生成潜在特征的码本检索点亮低光世界,低光环境也能拍出明亮大片!
  • 前端低代码必备:FrontendBlocks 4.0版本重磅发布,助力Uniapp-X原生APP开发
  • 如何将PyCharm 中使用 PDM 管理的 Django 项目迁移到 VS Code 并确保一切正常工作?
  • 认识Android Handler
  • 如何在 Ubuntu VPS 上安装 Cassandra 并运行单节点集群
  • Golang | Leetcode Golang题解之第316题去除重复字母
  • pxe的实验
  • 复杂智能软件系统开发
  • kickstart自动安装脚本
  • linux运维一天一个shell命令之grep详解
  • COMSOL金属氢化物-放氢过程
  • (四)软件性能测试
  • 萱仔大模型学习记录5-langchain实战
  • 安装使用netron
  • JDFrame 一款比 Java 8 Stream 更灵活的数据处理工具
  • 《Android系统开发中高级定制专栏导读》
  • LeetCode 114. 二叉树展开为链表
  • 78.子集
  • 历史标签如何时间迁移?
  • Jenkins参数化构建
  • 函数实例讲解(三)
  • 如何选择适合自己的编程语言?大学新生入门编程最佳路径指南
  • 编程的法则 依赖倒置原则 (Dependency Inversion Principle)包括如何实践
  • [数据集][目标检测]肾结石检测数据集VOC+YOLO格式1299张1类别
  • pxe安装部署
  • Linux用户-sudo命令
  • Unity强化工程 之 SpriteEditer Multiple
  • 大数据Flink(一百零九):阿里云Flink的基本名称概念
  • 如何利用AI工具延长摸鱼时间、准点下班?