Spring覆盖jar包中路径映射的几种解决方案

 更新时间:2025年09月19日 10:01:19   作者:陈三一  
本文主要介绍了Spring覆盖jar包中路径映射的几种解决方案,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

问题背景

项目中使用Spring,通过@GetMapping("/api/user") 定义了路径映射 /api/user,现在有个需求需要修改这个路径映射下的代码逻辑,而由于该定义来自引入的jar,无法直接修改代码。

解决方案

1 使用@RequestMapping优先级

Spring会优先选择更具体的映射:

@RestController
public class MyController {
    @GetMapping(path = "/api/user", params = "myParam")
    public String myMethod() {
        return "My implementation";
    }
}

当url中带有参数myParam时,spring会映射到这里处理,也可以设置为 params = "myParam=1",即当参数myParam=1时映射到此

2 使用Filter拦截并转发请求到特定path

  1. 创建自定义Filter
@Component
public class PathOverrideFilter extends OncePerRequestFilter {

    // 定义需要重定向的路径映射
    private static final Map<String, String> PATH_MAPPINGS = new HashMap<String, String>(){{
        put("/api/user", "/api-new/user");
    }};

    @Override
    protected void doFilterInternal(HttpServletRequest request, 
                                  HttpServletResponse response, 
                                  FilterChain filterChain) throws ServletException, IOException {
        String requestURI = request.getRequestURI();
        String redirectPath = PATH_MAPPINGS.get(requestURI);
        // 检查是否需要重定向
        if (StringUtils.isNotBlank(redirectPath)) {
            // 创建包装请求,修改路径信息
            HttpServletRequest wrappedRequest = new HttpServletRequestWrapper(request) {
                @Override
                public String getRequestURI() {
                    return redirectPath;
                }
                
                @Override
                public String getServletPath() {
                    return redirectPath;
                }
            };
            // 继续处理链,但使用修改后的请求
            filterChain.doFilter(wrappedRequest, response);
            return;
        }
        
        // 不需要重定向的请求正常处理
        filterChain.doFilter(request, response);
    }
}
  1. 创建目标Controller方法
@RestController
public class NewController {
    @GetMapping("/api-new/user")
    public String myMethod() {
        // 你的新实现
        return "My new implementation";
    }
}

对于大多数需要"覆盖"功能的场景,Filter转发路径方案通常是最佳选择,它平衡了简单性和功能性。

到此这篇关于Spring覆盖jar包中路径映射的几种解决方案的文章就介绍到这了,更多相关Spring覆盖jar包路径映射内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Mybatis-Plus接口BaseMapper与Services使用详解

    Mybatis-Plus接口BaseMapper与Services使用详解

    这篇文章主要为大家介绍了Mybatis-Plus接口BaseMapper与Services使用详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-05-05
  • kotlin改善java代码实例分析

    kotlin改善java代码实例分析

    我们给大家整理了关于kotlin改善java代码的相关实例以及操作的详细方法,有需要的读者们参考下。
    2018-03-03
  • Servlet关于RequestDispatcher的原理详解

    Servlet关于RequestDispatcher的原理详解

    这篇文章主要介绍了Servlet关于RequestDispatcher的原理详解,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-11-11
  • 基于Java实现Socket编程入门

    基于Java实现Socket编程入门

    Java最初是作为网络编程语言出现的,使得客户端和服务器的沟通变成了现实,而在网络编程中,使用最多的就是Socket,本文就来介绍一下基于Java实现Socket编程入门,感兴趣的可以来了解一下
    2022-03-03
  • maven springboot如何将jar包打包到指定目录

    maven springboot如何将jar包打包到指定目录

    这篇文章主要介绍了maven springboot如何将jar包打包到指定目录,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-12-12
  • Java 利用DeferredResult实现http轮询实时返回数据接口

    Java 利用DeferredResult实现http轮询实时返回数据接口

    这篇文章主要介绍了Java 利用 DeferredResult 实现 http 轮询实时返回数据接口,帮助大家更好的理解和学习使用Java,感兴趣的朋友可以了解下
    2021-03-03
  • Java gRPC拦截器简单实现分布式日志链路追踪器过程详解

    Java gRPC拦截器简单实现分布式日志链路追踪器过程详解

    有请求的发送、处理,当然就会有拦截器的需求,例如在服务端通过拦截器统一进行请求认证等操作,这些就需要拦截器来完成,今天松哥先和小伙伴们来聊一聊gRPC中拦截器的基本用法,后面我再整一篇文章和小伙伴们做一个基于拦截器实现的JWT认证的gRPC
    2023-03-03
  • Java与MySQL时间不一致问题解决

    Java与MySQL时间不一致问题解决

    本文主要介绍了Java与MySQL时间不一致问题解决,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-01-01
  • SpringMVC @NotNull校验不生效的解决方案

    SpringMVC @NotNull校验不生效的解决方案

    这篇文章主要介绍了SpringMVC @NotNull校验不生效的解决方案,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-09-09
  • java 实现计数排序和桶排序实例代码

    java 实现计数排序和桶排序实例代码

    这篇文章主要介绍了java 实现计数排序和桶排序实例代码的相关资料,需要的朋友可以参考下
    2017-02-02

最新评论