You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SpringBoot中如何兼容Jersey与Spring MVC实现平滑过渡?

实现Jersey与Spring MVC的默认路由兼容方案

核心思路

让Jersey占据根路径(/)作为默认路由入口,当Jersey无法匹配请求路径时,自动将请求转发给Spring MVC处理。这种方式既能完全保留原有Jersey端点的URL不变,又能最小化对新MVC端点路径的侵入性。

具体配置步骤

1. 调整Jersey配置,移除路径前缀

删除Jersey配置类上的@ApplicationPath注解,让Jersey默认处理根路径下的所有请求:

@Configuration
class JerseyConfig extends ResourceConfig {
    public JerseyConfig() {
        // 注册你的Jersey资源类所在包
        packages("com.your.project.jersey.resources");
    }
}

2. 配置Servlet优先级与映射

在SpringBoot配置文件(application.properties或application.yml)中,调整DispatcherServlet和Jersey Servlet的加载优先级与映射规则:

# 让Spring MVC的DispatcherServlet映射所有路径,但设置Jersey优先加载
spring.mvc.servlet.path=/*
spring.jersey.servlet.load-on-startup=1

YAML格式:

spring:
  mvc:
    servlet:
      path: /*
  jersey:
    servlet:
      load-on-startup: 1

3. 添加Jersey转MVC的转发过滤器

自定义Jersey响应过滤器,当Jersey返回404时,触发请求转发到Spring MVC:

@Provider
public class MvcForwardFilter implements ContainerResponseFilter {
    @Override
    public void filter(ContainerRequestContext requestCtx, ContainerResponseContext responseCtx) throws IOException {
        // 检测到Jersey无法匹配路径返回404时,开启转发
        if (responseCtx.getStatus() == 404) {
            requestCtx.setProperty("jersey.config.servlet.forwardOn404", true);
        }
    }
}

将过滤器注册到Jersey配置中:

@Configuration
class JerseyConfig extends ResourceConfig {
    public JerseyConfig() {
        packages("com.your.project.jersey.resources");
        register(MvcForwardFilter.class);
    }
}

验证逻辑

  • 访问原有Jersey端点URL(如/users/1):Jersey直接匹配并处理请求,完全保留原有路径。
  • 访问新的Spring MVC端点URL(如/new-orders/list):Jersey无法匹配该路径,返回404后触发转发,由Spring MVC接手处理。

该方案完全满足你的三个需求:

  • 同时保留Jersey与MVC端点
  • Jersey端点URL无任何改动
  • 新MVC端点无需强制添加前缀(可根据业务需求自由定义路径)

内容的提问来源于stack exchange,提问作者diziaq

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.07 07:35:24